配列の特徴
- 配列はnullを許容する
- 配列の要素数は、初期化された時に決まり、後から変更できない(要素の追加・削除不可。上書きは可能)
- 配列はオブジェクトクラスのサブクラスなので、オブジェクト型とみなすことができる
例)
example(Object[] val); //引数にオブジェクト型の配列を受けとる
example(Object val) //引数に配列を受け取ることができる
配列の生成方法
【注意するポイント】
- 変数宣言時に大かっこ[]があるか → []無し、または[]以外のカッコを使っていたらコンパイルエラー
- 変数宣言時に要素数を指定していないか → 変数宣言時に要素数を指定していたらコンパイルエラー
- インスタンスの生成時に要素数を指定しているか
- インスタンスの生成でnewを記述しているか
※) new省略し、初期化子( {} )だけで配列を作ることは可能!!
- 初期化子で指定した要素の数だけ、自動的にメモリ領域を確保する。
- 初期化子が使えるのは、変数宣言と同時の時のみ
- 変数宣言と初期化を別にするとコンパイルエラー
- 配列の初期化子は、左辺のデータ型から配列のデータ型を推論する
【配列の初期化例】
int a [][] = {{1,2},{3,4}}; //newを使わず初期化子だけで配列を生成
int b [] = {}; //newを使わず初期化子だけで配列を生成。配列の中身は空だがエラーではない
int[][]c = new int [][]{}; //newと初期化子、両方使うなら[][]の中は空である必要がある
int[] d;
d = new int[]{2,3}; //配列を格納する変数を作成後、インスタンスを生成して変数に代入
int [] e = new int[3]; //要素数3のインスタンス領域を確保
【コンパイルエラーが発生する初期化例】
int[] a;
a = int[2]; //インスタンス生成時にnewを記述しておらず、インスタンスを生成できていない
int array = new int[2]; //配列型を示す[]が無い
int array[2]; //変数宣言時に要素数を指定している。
int array1 = new int[2];
array1 = {1,2}; //初期化子が使えるのは変数宣言と同時の時だけ
int[] array2= new int[3]{}; //無名配列を作るときは[]の中に要素数を記述しない
【ポイント】
配列はインスタンスなので、生成しない限り使えない
配列を表す変数は、配列インスタンスへの参照を保持するための器であり、変数内に配列が作られるわけでは無い。配列インスタンスの方に、扱う要素数を記述する必要がある。