オブジェクトクラスのcloneメソッド

クローン()メソッドのオブジェクトが保護され、浅いコピーがあり、唯一実現するために、それを上書きするcloneメソッドを使用したいのCloneableを実装し、それ以外の場合は、例外CloneNotSupportedExceptionがスローされます、このメソッドを呼び出すことができます。

@Override
     パブリックオブジェクトクローン(){ 
        オブジェクトO = NULL ;
         試み{ 
            O = スーパー.clone(); 
        } キャッチ(CloneNotSupportedException E){ 
            e.printStackTrace(); 
        } 
//         人P =(人物)O;
 //         P .book =(書籍)p.getBook()クローン();. // これら二つはの深いコピーを使用することで解除
        リターンO; 
    }

我々は、一般的に3通りの方法で使用されるオブジェクトをコピーする必要がある場合

パブリック静的無効メイン(文字列[] args){ 
書籍B =新しいブック(「ジャワ」)。
人物P =新しい人物( "WT"、B)。
人物P1 =新しい人(P);
人物P2 =(人物)p.clone();
b.setBookName( "JS")。
p.setName( "zjj");
System.out.println( "P" + P)。
System.out.println( "P1:" +のP1)。
System.out.println( "P2:" + p2の);
}

浅いコピークローン(すなわち2つの段落を解放せず)を使用する場合、オブジェクトのコピーのみがオブジェクト参照オブジェクトのコピーが含まれていません。

P:{名:ZJJ、書籍:bookName {:}} JS             
P1の:{名:重量、書籍:{bookName:JS}}       // P1またはP2のいずれかで、値は、値の基本的なタイプのダイレクトコピーが、基準となりますオブジェクトタイプは、アドレスのコピーである 
P2:{名:重量、書籍:{bookName:JS}}       // Pの元の値へのオブジェクト参照が変更されると、ターゲットは浅いコピーを変更することになるように
 

ディープコピークローンを使用する場合(すなわち、その二つのセグメントを解放します)。

P2:{名:重量、書籍:{bookName:ジャワ}}       //場合ディープコピーもオブジェクト内のオブジェクトの値のコピーであり、基準オブジェクトの変更の元の値が影響を及ぼさないであろう

 

おすすめ

転載: www.cnblogs.com/sycamore0802/p/11247877.html