在Scala中,AnyRef.clone
执行浅或深拷贝吗?
答案 0 :(得分:21)
简短回答:浅薄。
不那么简短的回答: 除非被覆盖,否则AnyRef.clone()使用Java的Object.clone()作为其实现。
Object.clone()上的Javadoc:
类Object的方法clone 执行特定的克隆操作。 首先,如果是这个对象的类 没有实现接口 克隆,然后一个 抛出CloneNotSupportedException。 请注意,所有数组都被认为是 实现Cloneable接口。 否则,此方法会创建一个新的 此对象的类的实例 并初始化其所有字段 确切的内容 该对象的相应字段, 仿佛是通过转让;的内容 这些田地本身不是克隆的。 因此,该方法执行“浅 复制“这个对象,而不是”深 复制“操作。
请注意:
长答案:阅读 Effective Java,第2版,第11项:明智地覆盖克隆
摘要:不要使用它。有更好的选择。