主な内容の要点
Javaで配列をコピーする方法にはいくつか種類があり、単純な代入では「同じ配列を共有」してしまうので注意が必要です。独立した配列を作りたい場合は、要素ごとにコピーするか、専用メソッドを使います。
配列コピーの基本
- 代入(
=)だけではコピーにならないint[] dst = src;とすると、dstとsrcは同じ配列を参照する。片方を変更するともう片方も変わる。 - 独立したコピーを作る方法
1.手動でコピー
for文で要素を1つずつコピーする。
for (int i = 0; i < src.length; i++) {
dst[i] = src[i];
}
Java2.Arrays.copyOf メソッド
簡単に新しい配列を作れる。
int[] dst = Arrays.copyOf(src, src.length);
Java3.System.arraycopy メソッド
部分コピーや高速コピーに便利。
System.arraycopy(src, 0, dst, 0, src.length);
Javaシャローコピーとディープコピー
- シャローコピー(浅いコピー)
配列の要素が「参照型(オブジェクト)」の場合、コピー先も同じオブジェクトを参照する。
→ 元のオブジェクトを変更するとコピー先にも影響する。 - ディープコピー(深いコピー)
オブジェクトそのものを新しく作り直してコピーする。
→ 元の変更がコピー先に影響しない。
例:
dst[i] = new MyTest(src[i].num);
Java初心者が覚えておくべきポイント
- 代入はコピーではなく「同じものを指す」だけ
- 独立した配列が欲しいなら
Arrays.copyOfやSystem.arraycopyを使う - オブジェクト配列の場合はシャローコピーになるので注意
- 必要ならディープコピーを自分で実装する
このページは「配列コピーの基本」と「シャローコピーとディープコピーの違い」を理解するのに最適です。まずは Arrays.copyOf を使ってみるのがおすすめです。
