0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Javaの配列変数は参照型

Posted at

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の場合と同様の動作になる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?