Java克隆方法如何工作?

Ull*_*las 8 java

public class Student implements Cloneable {
    public Student clone() {
        Student clonedStudent = (Student) super.clone();
        return clonedStudent;
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么Java返回student对象而不是返回对象类对象.因为我们正在使用超级.这是否意味着Java本身在克隆方法中提供浅层克隆?

bNd*_*bNd 15

java克隆field by field copy就是因为Object类不知道将调用clone()方法的类的结构.

1)如果类只有原始数据类型成员,则将创建该对象的全新副本,并返回对新对象副本的引用.

2)如果类包含任何类类型的成员,则只复制对这些成员的对象引用,因此原始对象和克隆对象中的成员引用都引用同一对象.

在java中引用此链接对象克隆


Mar*_*oun 10

看看文档对它的评价:

...因此,此方法执行此对象的"浅拷贝",而不是"深拷贝"操作.

另见此链接:

如果类只有原始数据类型成员,则将创建该对象的全新副本,并返回对新对象副本的引用.但是,如果类包含任何类类型的成员,则只复制对这些成员的对象引用,因此原始对象和克隆对象中的成员引用都引用同一对象.