开发者社区> 问答> 正文

Java的深度贝和浅拷贝?

和C++有什么区别吗?

展开
收起
YDYK 2020-04-25 21:07:52 549 0
1 条回答
写回答
取消 提交回答
  • 克隆是原始副本的精确副本。在 java 中,它实质上意味着能够创建与原始对象具有类似状态的对象。克隆() 方法提供此功能。

    浅副本尽可能少地重复。默认情况下,java 克隆是浅拷贝或"按字段复制字段",即 Object 类不知道将调用克隆()方法的类的结构。因此,JVM当要求克隆时,做以下的事情:

    1) 如果类只有基元数据类型成员,则将创建对象的全新副本,并返回对新对象副本的引用。

    2) 如果类包含任何类类型的成员,则仅复制对这些成员的对象引用,因此原始对象和克隆对象中的成员引用引用同一对象。

    深层副本复制了所有内容。集合的深层副本是两个集合,原始集合中的所有元素都重复。在这里,我们希望克隆独立于原始克隆,并且对克隆进行更改不应影响原始克隆。

    深度克隆要求满足以下规则。

    无需单独复制基元。 原始类中的所有成员类都应支持克隆,上下文中原始类的克隆方法应在所有成员类上调用 super.clone()。 如果任何成员类不支持克隆,那么在克隆方法中,必须创建该成员类的新实例,并逐个将其所有属性复制到新成员类对象。此新成员类对象将在克隆对象中设置。

    2020-04-25 21:08:05
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载