Java - 参照型変数

参照型変数

配列変数は参照型と呼ばれる変数で、基本データ型の変数とは考え方が異なります。

基本データ型の変数の場合、変数は値を格納する入れ物です。そのため、変数と変数に格納されている値は同じように扱うことができます。それに対して参照型の変数では、値を格納する入れ物は別に用意されます。そして参照型の変数には入れ物の位置が格納されます。

配列を宣言した時点では、まだ入れ物が用意されていません。そのため、宣言時点では特殊な null という値が配列変数に格納されています。null とは、参照型の変数にまだ値が格納されていないことを表すために用意された定数です。

int arr[];
参照型変数

new 演算子を使って値が格納できる場所が確保されると、確保された場所の先頭の場所の位置が配列変数に代入されます。この時点で初めて配列変数は有効な値を持つことになります。

int arr[];
arr = new int[5];
参照型変数

配列変数は、どこかに確保された場所の位置だけを格納しています。配列に値を格納したり、値を取り出したりする場合は、配列変数そのものではなく配列の各要素に対して行うことになります。

参照型の変数は、他に用意した参照型の変数に代入することもできます。

int n[] = new int[5];
int m[];

m = n;
参照型変数

配列変数 m に、配列変数 n を代入することでいずれの配列変数も同じ場所の位置を持つことになります。このため、どちらの配列変数を使っても同じ要素に対して操作することができます。

配列を別の配列にコピーした場合は、元の配列が持っていた要素が複製されるわけではなく、まったく同じ要素に対して二つの配列を変数を使ってアクセスすることができるようになります。

int n[] = {10};
int m[];

m = n;

System.out.println(n); // [I@372f7a8d
System.out.println(m); // [I@372f7a8d

System.out.println("n[0] = " + n[0]); // n[0] = 10
System.out.println("m[0] = " + m[0]); // m[0] = 10
参照型変数

関連記事