私はオブジェクトをクローンし、新しいクローンオブジェクトのメンバー機能を変更しようとしました。それが浅いコピーで、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とポイント浅いコピーである場合。それは起こりません。誰でも説明することができます(私はクローンが私たちにオブジェクトのコピーを与えるように設計されていると理解していますが、それが浅いコピーの場合はなぜ浅いコピーが必要なのですか? ありがとうございます。
変更可能なオブジェクトを参照する参照フィールドを詳細に複製する必要があります。たとえば、Stringフィールドは参照ですが、深く複製する必要はありません。 –