clone() 在 java 中是浅层复制吗?

2022-09-03 08:57:38

在java中是一个浅层副本吗?clone()

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

我从维基百科上读到这个。

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


答案 1

默认值确实是浅副本。但是,它旨在抛出一个,除非您的对象实现 。Object.clone()CloneNotSupportedExceptionCloneable

实现 时,您应该通过调用本身可克隆的所有字段来覆盖以使其执行深度复制。Cloneableclone()clone()


答案 2

它是一个浅副本,因为它只复制对其他对象的引用。假设我们有这些类:

class A {
    B variable
    A() {
        variable = new B();
    }
}

class B { }

现在我们克隆了 A 的实例:

A firstA = new A();
A secondA = firstA.clone();

firstA 和 secondA 中的 B 实例将相同。您将没有 B 实例的副本。这就是为什么 clone() 据说会做浅层复制。

您链接的页面上的图表应该可以帮助您理解所有这些。


推荐