我试图克隆一个对象并更改新克隆对象的成员函数。如果是浅拷贝,并且根据wiki页面,浅拷贝和原始对象指向同一个对象,则应该更改变量值。对象克隆浅拷贝不会改变变量
CloneExample obj1=new CloneExample();
CloneExample obj2=(CloneExample) obj1.clone();
obj1.a=2;
obj1.c='a';
System.out.println("obj1 real "+obj1.a+" "+obj1.c);
System.out.println("obj2 real "+obj2.a+" "+obj2.c);
obj2.a=99;
obj2.c='z';
System.out.println("obj2 after change "+obj2.a+" "+obj2.c);
System.out.println("obj1 after change "+obj1.a+" "+obj1.c);
System.out.println("obj1="+obj1+" obj2="+obj2);
如果这个克隆是浅拷贝,然后OBJ2和OBJ1指向相同的参考OBJ,改变OBJ2应OBJ1反映。它不会发生。任何人都可以解释(我明白克隆旨在给我们对象的副本,但如果它是浅拷贝,那么为什么我们需要浅拷贝?我们应该总是去深拷贝)。 谢谢。
您只需要深入克隆指向可变对象的引用字段即可。例如,一个字符串字段是一个引用,但不需要深入克隆。 – 2012-03-22 21:11:19