在Scala中,
AnyRef.clone
方法执行的是浅复制还是深复制?简短回答: 浅拷贝。
稍长回答: 除非被覆盖,AnyRef.clone() 使用 Java 的 Object.clone() 作为其实现。
关于 Object.clone() 的 Javadoc:
Object 的 clone 方法执行特定的克隆操作。首先,如果此对象的类没有实现 Cloneable 接口,则会抛出 CloneNotSupportedException 异常。请注意,所有数组都被视为实现了 Cloneable 接口。否则,此方法创建此对象类的一个新实例,并使用与该对象对应字段的内容完全相同的内容初始化其所有字段,就像通过赋值一样;字段的内容本身不会被克隆。因此,此方法执行此对象的 "浅层拷贝",而不是 "深层拷贝" 操作。
请注意:
详细回答: 请阅读 Effective Java, 2nd Edition, Item 11: Override clone judiciously
总结: 不要使用它。有更好的替代方法。