Java入門 配列

本記事は、Javaを一から学んでいく際の学習メモとして書かれています。
主にインプレスから出版されている「スッキリわかるJava入門 第2版 (スッキリシリーズ)」の内容に沿ったかたちで学習していきます。
今回は、Javaの配列について学んでいきます。
配列
あるデータをまとめて管理する場合、配列(array)と呼ばれるデータ構造を利用することができます。
配列では、変数のような箱が連続的に並んでおり、そのひとつひとつを要素(element)と呼びます。
なお、配列では異なる型同士を格納することはできません。
それでは、配列の作成方法について確認してみます。
int[] array = new int[5];
上記ではint型の要素を持つ配列を5つ作成しています。
newというキーワードは、ヒープ領域からメモリを確保してオブジェクトを作成します。
しかし、この状態では変数arrayには値を代入していないため、すべて0で初期化されます。
なお、値を代入しないで配列のオブジェクトを作成した場合、int型やdouble型などの数値型は0、String型はnull、boolean型はfalseで初期化されます。
また、配列の宣言と同時に値を代入するには以下のように記述します。
int[] array = {1,2,3,4,5};
配列の各要素へアクセスするには、array[0]のように[]の中に添え字(index)を入れます。
添え字は必ず0から始まり、上記のように5つの要素数の配列がある場合、その添え字は0~4の5つになります。
なお、添え字として指定できる数字以外を指定してしまった場合は場合は、ArrayIndexOutOfBoundsExceptionという例外(exception)が発生します。
また、配列のすべての要素を表示したりする場合は、以下のようなfor文、もしくは拡張for文を利用します。
for (int i = 0; i < array.length; i++){
System.out.println(array[i]);
}
for (int v : array){
System.out.println(array[i]);
}
また、上記のように配列名.lengthを利用することでその配列の要素数を知ることができます。
参照
例えば、以下のように配列を2つ宣言した場合、最終的にarray1[0]には0が格納されます。
int[] array1 = {100};
int[] array2 = array1;
array2[0] = 0;
System.out.println(array1[0]);
この時、array1とarray2は同じアドレスを指している状態となります。
このように、メモリ上のアドレスを格納する変数を参照型(reference type)と呼びます。
ガベージコレクション
配列などの参照型では、オブジェクトが作成されるたびにヒープ領域からメモリを確保しますが、そのアドレスへの参照がなくなった時点で、自動的にメモリ領域を解放します。
この仕組みをガベージコレクション(gabage collection)と呼びます。
例えば、作成した参照型の変数を意図的に参照から外したい場合は、その変数にnullと呼ばれる特別な値を代入します。
int[] array = {100};
array = null;
System.out.println(array[0]);
上記の2行目でnullを代入した時点で参照が外れ、100が格納されているアドレスを指す変数が無くなるため、そのメモリは解放されてします。
また、この状態で3行目を実行すると、NullPointerExceptionの例外が発生します。
最後に
今回はJavaの配列について、基本的なルールを学びました。
次回はメソッドについて学んでいきます。
参考書籍