1700441819
编写高质量代码:改善Java程序的151个建议 建议43:避免对象的浅拷贝
1700441820
1700441821
我们知道一个类实现了Cloneable接口就表示它具备了被拷贝的能力,如果再覆写clone()方法就会完全具备拷贝能力。拷贝是在内存中进行的,所以在性能方面比直接通过new生成对象要快很多,特别是在大对象的生成上,这会使性能的提升非常显著。但是对象拷贝也有一个比较容易忽略的问题:浅拷贝(Shadow Clone,也叫做影子拷贝)存在对象属性拷贝不彻底的问题。我们来看这样一段代码:
1700441822
1700441823
public class Client{
1700441824
1700441825
public static void main(String[]args){
1700441826
1700441827
//定义父亲
1700441828
1700441829
Person f=new Person(“父亲”);
1700441830
1700441831
//定义大儿子
1700441832
1700441833
Person s1=new Person(“大儿子”,f);
1700441834
1700441835
//小儿子的信息是通过大儿子拷贝过来的
1700441836
1700441837
Person s2=s1.clone();
1700441838
1700441839
s2.setName(“小儿子”);
1700441840
1700441841
System.out.println(s1.getName()+“的父亲是”+s1.getFather().getName());
1700441842
1700441843
System.out.println(s2.getName()+“的父亲是”+s2.getFather().getName());
1700441844
1700441845
}
1700441846
1700441847
}
1700441848
1700441849
class Person implements Cloneable{
1700441850
1700441851
//姓名
1700441852
1700441853
private String name;
1700441854
1700441855
//父亲
1700441856
1700441857
private Person father;
1700441858
1700441859
public Person(String_name){
1700441860
1700441861
name=_name;
1700441862
1700441863
}
1700441864
1700441865
public Person(String_name, Person_parent){
1700441866
1700441867
name=_name;
[
上一页 ]
[ :1.700441818e+09 ]
[
下一页 ]