我知道这个问题可能已经被问过了,但我的问题有点不同。我已经搜索过了,知道了Java方法object.clone()
使用浅拷贝,也就是复制引用而非实际对象。假设我有一个dog类。
Class Dog{
public Dog(String name, DogTail tail, DogEar ear){
this.name = name;
this.tail = tail;
this.ear = ear;
}
}
DogTail t = new DogTail();
DogEar ear = new DogEar();
Dog dog1 = new Dog("good", t,ear);
假设我想要获得dog1的一个副本。
Dog dognew = dog1.clone();
如果这个clone()
方法使用浅拷贝,那么它将会复制引用。因此,如果我在上面创建的对象或者ear方法中进行更改,那么dognew对象也会发生变化,反之亦然。那么这种克隆有什么好处呢?这个问题是由于有人说创建一个巨大的对象比克隆更糟糕,因为你可以在使用clone()
方法时节省性能。
clone()
方法的合理默认行为。如果这不适用于您的应用程序,请自己编写一个复制构造函数或deepCopy()
方法。 - Ted Hoppclone()
或Cloneable
接口。作为学术兴趣的主题-很棒。 - RealSkeptic