参照型変数の浅いコピーと深いコピー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・このカテゴリのトップページに戻る ・634labs UIコレクションギャラリー サイト検索Y!ログール |