Jos*_*son 10 java deep-copy shallow-copy
是clone()Java中的浅拷贝?
最终,这将获得Object的clone()方法(最上层的类),它创建与对象相同的类的新实例,并将所有字段复制到新实例("浅拷贝").
我是从维基百科读到的.
我不明白为什么它是浅拷贝.clone()将创建一个包含所有字段的新实例.这只是一个很深的副本吗?困惑.需要一些解释.
Chr*_*ung 17
默认Object.clone()值确实是浅拷贝.但是,CloneNotSupportedException除非您的对象实现,否则它将被设计为抛出Cloneable.
在实现时Cloneable,您应该clone()通过调用clone()本身可复制的所有字段来覆盖以使其执行深层复制.
这是一个浅表副本,因为它仅复制对其他对象的引用。说我们有这些课程:
class A {
    B variable
    A() {
        variable = new B();
    }
}
class B { }
现在我们克隆一个A实例:
A firstA = new A();
A secondA = firstA.clone();
firstA和secondA中的B实例将相同。您将没有B实例的副本。这就是为什么称clone()做浅拷贝的原因。
您链接的页面上的图表应有助于您理解所有内容。
顺便说一句,我很惊讶没有人提到Joshua Bloch对Cloneable的看法
如果您已经阅读了我的书中有关克隆的项目,特别是如果您在这些内容之间进行了阅读,您将会知道我认为克隆已经深受打击.存在一些设计缺陷,其中最大的一个是Cloneable接口没有克隆方法.这意味着它根本不起作用:制作一些Cloneable并没有说明你可以用它做什么.相反,它说明了内部可以做些什么.它说如果通过反复调用super.clone它最终调用Object的clone方法,这个方法将返回原始的字段副本.
| 归档时间: | 
 | 
| 查看次数: | 10956 次 | 
| 最近记录: |