1700461810
1700461811
//拷贝一个对象
1700461812
1700461813
Thing cloneThing=thing.clone();
1700461814
1700461815
}
1700461816
1700461817
}
1700461818
1700461819
运行结果如下所示:
1700461820
1700461821
构造函数被执行了……
1700461822
1700461823
对象拷贝时构造函数确实没有被执行,这点从原理来讲也是可以讲得通的,Object类的clone方法的原理是从内存中(具体地说就是堆内存)以二进制流的方式进行拷贝,重新分配一个内存块,那构造函数没有被执行也是非常正常的了。
1700461824
1700461825
1700461826
1700461827
1700461828
设计模式之禅 13.4.2 浅拷贝和深拷贝
1700461829
1700461830
在解释什么是浅拷贝和什么是深拷贝之前,我们先来看个例子,如代码清单13-10所示。
1700461831
1700461832
代码清单13-10 浅拷贝
1700461833
1700461834
public class Thing implements Cloneable{
1700461835
1700461836
//定义一个私有变量
1700461837
1700461838
private ArrayList<String>arrayList=new ArrayList<String>();
1700461839
1700461840
@Override
1700461841
1700461842
public Thing clone(){
1700461843
1700461844
Thing thing=null;
1700461845
1700461846
try{
1700461847
1700461848
thing=(Thing)super.clone();
1700461849
1700461850
}catch(CloneNotSupportedException e){
1700461851
1700461852
e.printStackTrace();
1700461853
1700461854
}
1700461855
1700461856
return thing;
1700461857
1700461858
}
1700461859
[
上一页 ]
[ :1.70046181e+09 ]
[
下一页 ]