0

我问了一个关于在 java 中克隆的问题,得到的答案是深拷贝创建了一个对象的新实例,该实例在成员变量中携带相同的状态和数据。有人告诉我浅拷贝只是将对象引用分配给另一个引用变量。但这不是复制那个分配(为对象位置创建一个新指针)。

如果您尝试克隆的对象中包含引用变量,那么什么是对象的深度复制?会使用myObj2 = myObj.clone()克隆对象中的所有组件吗?假设 myObj 包含指向其他对象位置的其他引用变量,这些引用变量也会被克隆吗?所以 myObj2 的内部引用变量不会指向与 myObj 中的指针指向的旧对象位置相同的旧对象位置。我需要在这里清楚地了解克隆的全部内容。

先感谢您。

4

1 回答 1

1

我可以给你一个不满意的答案:“需要的清晰度”将不可用。:)

问题是,这里是文档的前两句话java.lang.Object.clone()

创建并返回此对象的副本。“复制”的确切含义可能取决于对象的类别。(重点补充)

所以这取决于课程的作者。

如果您阅读有关 的进一步文档clone(),它建议它应该实现一个深拷贝(按值复制所有对象,而不是引用)。例如:

通常,这意味着复制任何包含被克隆对象的内部“深层结构”的可变对象,并将对这些对象的引用替换为对副本的引用。

但默认实现clone()不这样做:

否则,此方法会创建此对象的类的新实例,并使用此对象的相应字段的内容来初始化其所有字段,就像通过赋值一样;字段的内容本身不会被克隆。因此,此方法执行此对象的“浅拷贝”,而不是“深拷贝”操作。

所以这取决于类,以及作者如何解释上述语义(假设作者理解它们)。

于 2014-05-14T13:29:21.140 回答