Java -配列-
配列は、同じデータ型の要素を集めて集合化したものです。
配列は、参照型の1つなので、各要素の値が直接変数に代入されることはありません。
このため、配列用の領域を別途作成する必要があります。
配列を参照する変数には配列のアドレス情報が代入されます。
配列の宣言
配列を利用するには、まず配列型変数を宣言します。
配列型変数は、参照型変数の1つです。
配列型変数の初期化
配列型変数がメンバ変数として宣言されている場合は、デフォルトでnullが代入されています。
配列型変数がローカル変数として宣言されている場合は、デフォルトで初期化されません。
また、暗黙的または明示的にnullが代入されている場合は、その配列の要素にアクセスしようとすると、実行時にNullPointerException例外が発生します。
配列の生成
配列を生成するには、new演算子を利用します。
要素数(インデックス数)には、その配列が扱う要素の数を指定します。
要素数は、一度指定したら変更することはできません。
new データ型[要素数];
new演算子によって配列のインスタンスが生成され、さらにそのインスタンスのアドレス情報が出力されます。
通常は、出力されたアドレス情報を配列型変数に代入します。
サンブル(int型の5つの要素を持つ配列の生成)
int a[] = new int[5];
// 2行に分けて記述する場合
int a[];
a = new int[5];
配列の要素数の指定は、通常int型の整数リテラル、int型の変数で指定しますが、 byte型、short型、char型の値や変数を利用することができます。
配列のデフォルト値
new 演算子を利用して配列を生成した場合、配列のそれぞれの要素には自動的にデフォルト値が代入され初期化されます。
配列の要素の初期化は、配列型変数がメンバ変数であってもローカル変数であっても必ず行われます。
データ型 | デフォルト値 |
---|---|
byte | 0 |
short | 0 |
char | '¥u0000' |
int | 0 |
long | 0L |
float | 0.0F |
double | 0.0 |
boolean | false |
参照型 | null |
配列の要素の初期化
配列を生成する場合にnew演算子を使わず、直接、配列の要素の値を指定して初期化を行うことができます。
直接、配列の要素の値を指定することによって、要素数を指定する必要がなくなり、コンパイル時に自動的に要素数が計算されます。
配列の初期化(配列要素の値を直接指定) 【 】 は省略可能
データ型 [] 配列型変数名 = { 【値1】【,値2】 【,値3】・・・};
または
データ型 [] 変数配列名 = new データ型[] { 【値1】【,値2】 【,値3】・・・};
サンプル
int [] a = {10,20,30,40.50};
int [] a = new int[] {10,20,30,40.50};
上記の2つは、同じものになります。
配列の要素数の取得
配列の要素数は、legthというメンバ変数を利用して取得できます。
配列の要素数の取得
配列型変数名.length
String型のlengthはメソッドなので length() とかっこが付きますが、 配列のlengthには付きません。
配列の要素へのアクセスする場合の書式
配列型変数[要素番号]
最初の要素番号は0
2次元配列(多次元配列)の宣言(2次元目のすべてが同じ要素数の場合)
Javaでは、配列の要素に配列型変数を指定することができます。
2次元配列の宣言
データ型 [] [] 配列型変数名
2次元配列の要素の初期化【 】は省略可能
データ型 [] [] 配列型変数名 = {{【値1】【,値2】…},{【値3】【,値4】…} …}
または
データ型 [] [] 配列型変数名 = new データ型 []{{【値1】【,値2】…},{【値3】【,値4】…} …}
2次元配列(多次元配列)の宣言(2次元目の要素数が固定ではない場合)
2次元の配列を作成する場合には、2次元目の配列の要素数を1次元目の配列の要素数ごとに変えることができます。
- 1次元目の配列をnew演算子を利用して生成する。2次元目の配列の要素数を記述しない。
- 2次元目に相当する配列をnew演算子を利用して生成する。
参照型の配列
配列には基本データ型の値だけでなく、参照型のオブジェクトを格納することができます。
その際、格納するオブジェクトはnew演算子を利用してあらかじめ生成しておく必要があります。
参照型の配列の宣言、作成、初期化の方法は、基本データ型を基本的は、同じです。