[ Java ] 配列のコピー( 参照コピー と ディープコピー )

Pocket

ここでは、Java で配列のコピーを行うサンプルコードを掲載しています。詳細はサンプル中のコメントを確認ください。

スポンサーリンク

参照コピー ( shallow copy )

配列の要素を互いに共有させて、互いに影響を与え合う参照コピーのサンプルになります。実行結果からも互いの参照からの値の変更は影響を与えあっていることが確認できます。

// 配列を作成
int[] intSrcArray = {1, 2, 3};

// 参照コピー
int[] intDstArray = intSrcArray;

// import java.util.Arrays; が必要
// 変更前の値をそれぞれの参照から出力
System.out.println(Arrays.toString(intSrcArray));
System.out.println(Arrays.toString(intDstArray));

// それぞれの参照から値を変更する
intSrcArray[0] = 100;
intDstArray[2] = 200;

// 変更後の値をそれぞれの参照から出力
System.out.println(Arrays.toString(intSrcArray));
System.out.println(Arrays.toString(intDstArray));

/*
 * 型をStringにして同様の確認
 */
String[] strSrcArray = {"apple", "orange", null};
String[] strDstArray = strSrcArray;

System.out.println(Arrays.toString(strSrcArray));
System.out.println(Arrays.toString(strDstArray));

strSrcArray[0] = "new apple";
strDstArray[2] = "melon";

System.out.println(Arrays.toString(strSrcArray));
System.out.println(Arrays.toString(strDstArray));

//-----------------------------------------
// 出力結果
//-----------------------------------------
//  intSrcArray(変更前) [1, 2, 3]
//  intDstArray(変更前) [1, 2, 3]
//  intSrcArray(変更後) [100, 2, 200]
//  intSrcArray(変更後) [100, 2, 200]
//
//  strSrcArray(変更前) [apple, orange, null]
//  strDstArray(変更前) [apple, orange, null]
//  strSrcArray(変更後) [new apple, orange, melon]
//  strSrcArray(変更後) [new apple, orange, melon]
ディープコピー ( Deep Copy )

配列の要素を共有せず、個々に値を持たせる配列のコピーを行うにサンプルです。本サンプルでは、Arrays.copyOf メソッドを使用しています。実行結果からも各配列の値は個々に管理されていることが確認できます。

// import java.util.Arrays; が必要
int[] intSrcArray = {1, 2, 3};

// 配列のコピーを作成する
int[] intDstArray = Arrays.copyOf(intSrcArray, intSrcArray.length);

System.out.println(Arrays.toString(intSrcArray));
System.out.println(Arrays.toString(intDstArray));

intSrcArray[0] = 100;
intDstArray[2] = 200;

System.out.println(Arrays.toString(intSrcArray));
System.out.println(Arrays.toString(intDstArray));

//-----------------------------------------
// 出力結果
//-----------------------------------------
// [1, 2, 3]
// [1, 2, 3]
// [100, 2, 3]
// [1, 2, 200]

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *