clone() 在 java 中是浅层复制吗?
2022-09-03 08:57:38
在java中是一个浅层副本吗?clone()
最终,这到达 Object(最上面的类)的 clone() 方法,该方法创建与对象相同的类的新实例,并将所有字段复制到新实例(“浅副本”)。
我从维基百科上读到这个。
我不明白为什么它是一个浅薄的副本。 将创建一个包含所有字段的新实例。这只是一个深度副本吗?困惑。需要为我解释一下。clone()
在java中是一个浅层副本吗?clone()
最终,这到达 Object(最上面的类)的 clone() 方法,该方法创建与对象相同的类的新实例,并将所有字段复制到新实例(“浅副本”)。
我从维基百科上读到这个。
我不明白为什么它是一个浅薄的副本。 将创建一个包含所有字段的新实例。这只是一个深度副本吗?困惑。需要为我解释一下。clone()
默认值确实是浅副本。但是,它旨在抛出一个,除非您的对象实现 。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() 据说会做浅层复制。
您链接的页面上的图表应该可以帮助您理解所有这些。