【发布时间】:2012-03-22 20:29:34
【问题描述】:
我试图克隆一个对象并更改新克隆对象的成员函数。如果是浅拷贝并且根据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 中。它不会发生。谁能解释一下(我知道克隆旨在给我们对象的副本,但如果它是浅拷贝,那么为什么我们需要浅拷贝?我们应该总是去深拷贝)。 谢谢你。
【问题讨论】: