Javaの配列変数は参照型。
当たり前な基礎的なことだと思いますが、元々PHPをしていたので、
自身の備忘録のため、少しまとめてみました。
例えば、下記のようなコードの場合には100が出力される。
int[] a = { 1, 2, 3 };
int[] b = a;
b[0] = 100;
System.out.println(a[0]);
// a[0]は100が出力される。
これは、Javaの配列変数が参照型なので、int[] a には配列が作られた
メモリアドレスが格納されるため。
例えば、int[] a で作成された配列のメモリアドレスがABC123(実際はこんなメモリアドレスはないと思います)だとすれば、
このABC123というメモリアドレス(場所)に配列aが記録されている。
そしてint[] b に入っているのは配列変数int[] a のメモリアドレスであるABC123が入るので、要は同じ配列ということになる。
そのため、 b[0]=100 は a[0]=100 と同じことになる。
これがPHPで同様の下記コードを書いてみると、100ではなく1が出力される。
$a = [1,2,3];
$b = $a;
$b[0] = 100;
echo $a[0];
// 1が出力される
これはPHPの場合は参照型ではなく、値渡しになるため、
$bには$aのメモリアドレスではなく、$aの配列そのものがコピーして渡されているため。
PHPでは参照型にするためには、下記のように&をつけてあげる必要がある。
$a = [1,2,3];
$b = &$a;
// ↑$aの前に&をつける
$b[0] = 100;
echo $a[0];
// 100が出力される
こうすることで参照型になり、$bには$aで作成された配列のメモリアドレスが
格納されるため、上記のJavaの場合と同様の動作になる。