java中的clone()是浅拷贝吗?

java中的clone()是一个浅拷贝吗?

最后,这将获得Object(最上面的类)的clone()方法,该方法创建与对象相同的类的新实例,并将所有字段复制到新实例(“浅拷贝”)。

我从维基百科读到这个。

我不明白为什么它是一个浅拷贝。 clone()将创建一个包含所有字段的新实例。 这只是一个深刻的副本? 困惑。 我需要一些解释。


默认的Object.clone()确实是一个浅拷贝。 但是,它的目的是抛出一个CloneNotSupportedException除非你的对象实现了Cloneable

而当你实现Cloneable ,你应该重写clone()以使它可以进行深层复制,方法是在所有本身可复制的字段上调用clone()


顺便说一句,我很惊讶没有人提到Joshua Bloch对Cloneable的看法

如果您在我的书中阅读过关于克隆的内容,尤其是如果您在各行之间阅读的话,那么您会知道我认为克隆已经彻底崩溃了。 有一些设计缺陷,其中最大的问题是Cloneable接口没有克隆方法。 这意味着它根本行不通:制作Cloneable并没有说明你可以用它做什么。 相反,它说明了它可以在内部做些什么。 它说,如果通过反复调用super.clone它最终会调用Object的克隆方法,则此方法将返回原始字段副本。


clone()创建所有字段的副本。 Java具有原始类型和返回 - 当你克隆你的对象时,你会得到一个新的对象,其中包含所有原始字段的副本(它就像深层副本),但是你也拥有所有引用字段的副本。 因此,你会得到两个对象,它们拥有原语的副本和对相同对象的引用副本 - 原始对象和复制对象都将使用相同的对象。

链接地址: http://www.djcxy.com/p/40797.html

上一篇: Is clone() in java shallow copy?

下一篇: Original object is also changed when values of cloned object are changed