@634

参照型変数の浅いコピーと深いコピー

Advertisement

浅いコピー

参照型変数のコピー(代入とか)において、参照情報だけがコピーされることを浅いコピー(shallow copy:シャローコピー)という。

浅いコピーの例
public class ShallowCopy{
    public static void main(String args[]){
        int[] intArray1 = {10, 20, 30};
        int[] intArray2 = intArray1;  //コピー

        //intArray1の全要素に100を代入。
        for(int i = 0; i < intArray1.length; i++){
            intArray1[i] = 100;
        }

        //intArray2の全要素表示。
        for(int i = 0; i < intArray2.length; i++){
            System.out.println(intArray2[i]);
        }

        //参照先の比較。intArray1 == intArray2 でも同じ。
        if(intArray1.equals(intArray2)){
            System.out.println("同じ参照先");
        }else{
            System.out.println("別の参照先");
        }
    }
}
結果
100
100
100
同じ参照先

深いコピー

浅いコピーに対して、参照型変数の完全なクローンを作ることを深いコピー(deep copy:ディープコピー)と呼ぶ。

深いコピーの例
public class DeepCopy{
    public static void main(String args[]){
        int[] intArray1 = {10, 20, 30};
        int[] intArray2 = (int[])intArray1.clone();  //配列代入

        //intArray1の全要素に100を代入。
        for(int i = 0; i < intArray1.length; i++){
            intArray1[i] = 100;
        }

        //intArray2の全要素表示。
        for(int i = 0; i < intArray2.length; i++){
            System.out.println(intArray2[i]);
        }

        //参照先の比較。intArray1 == intArray2 でも同じ。
        if(intArray1.equals(intArray2)){
            System.out.println("同じ参照先");
        }else{
            System.out.println("別の参照先");
        }
    }
}
実行結果
10
20
30
別の参照先

Advertisement

ショートカット

634
634ブログ
このカテゴリのトップページに戻る
Incubator(Pukiwiki)
634ラボ
   UIコレクションギャラリー
   ZO-3ジェネレーター

サイト検索


Y!ログール