【发布时间】:2010-11-19 00:43:59
【问题描述】:
在 Scala 中,AnyRef.clone 是执行浅拷贝还是深拷贝?
【问题讨论】:
在 Scala 中,AnyRef.clone 是执行浅拷贝还是深拷贝?
【问题讨论】:
简答:肤浅。
不那么简短的回答: 除非它被覆盖,否则 AnyRef.clone() 使用 Java 的 Object.clone() 作为其实现。
Object.clone() 上的 Javadoc:
类 Object 的方法克隆 执行特定的克隆操作。 首先,如果这个对象的类 没有实现接口 可克隆,然后是 抛出 CloneNotSupportedException。 请注意,所有数组都被认为是 实现接口Cloneable。 否则,此方法会创建一个新的 此对象的类的实例 并初始化其所有字段 确切的内容 该对象的相应字段, 好像是通过分配;的内容 这些字段本身并没有被克隆。 因此,该方法执行“浅 此对象的副本,而不是“深 复制”操作。
请注意:
长答案:阅读Effective Java,第 2 版,第 11 项:明智地覆盖克隆
总结:不要使用。还有更好的选择。
【讨论】: