我試圖克隆一個對象並更改新克隆對象的成員函數。如果是淺拷貝,並且根據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