配列初期化子
日本語 | 配列初期化子 |
英語 | array initializer |
ふりがな | はいれつしょきかし |
フリガナ | ハイレツショキカシ |
配列を初期化する式。
「型[] 変数名 = { 初期値, 初期値 };」もしくは「型[] 変数名 = new 型[]{ 初期値, 初期値 };」という形式で、配列のインスタンスを作成し、同時に各要素を初期化することができる。
この「{ 初期値, 初期値 }」の部分を「配列初期化子」と呼ぶ。
「型[] 変数名 = new 型[要素数];」の形式と違い、各要素の初期化を同時に行うことができる。
配列初期化子は「{ 初期値, 初期値, ... }」という形式で、初期値と要素数を指定する。
要素数の数だけ「初期値」をカンマで継なぎ指定する。この初期値の個数の要素数でインスタンスが作成される。
つまり「new 型[初期値の個数]」と同じとなる。
インスタンス作成後、各要素に指定した初期値で初期化が行われる。
「new 型[要素数]」に比べ、各要素に初期値を格納できる点で便利である。
だが、初期値が必要ない場合や、要素数が非常に大きい場合には使用しない方がプログラムが簡単になるだろう。
「型[] 変数名 = { 初期値, 初期値 };」もしくは「型[] 変数名 = new 型[]{ 初期値, 初期値 };」という形式で、配列のインスタンスを作成し、同時に各要素を初期化することができる。
この「{ 初期値, 初期値 }」の部分を「配列初期化子」と呼ぶ。
「型[] 変数名 = new 型[要素数];」の形式と違い、各要素の初期化を同時に行うことができる。
配列初期化子は「{ 初期値, 初期値, ... }」という形式で、初期値と要素数を指定する。
要素数の数だけ「初期値」をカンマで継なぎ指定する。この初期値の個数の要素数でインスタンスが作成される。
つまり「new 型[初期値の個数]」と同じとなる。
インスタンス作成後、各要素に指定した初期値で初期化が行われる。
「new 型[要素数]」に比べ、各要素に初期値を格納できる点で便利である。
だが、初期値が必要ない場合や、要素数が非常に大きい場合には使用しない方がプログラムが簡単になるだろう。
参考サイト
- (参考サイトはありません)
public class Sample
{
public static void main( String[] args )
{
// int型配列の参照を作ります。
// これが配列初期化子です。
// ← →
int[] ints1 = { 100, 200, 300 };
// ↓ ↓ ↓
// ints[0] ↓ ints[2]
// ints[1]
// 上記の例では、int型配列(要素数3)のインスタンスを
// 作成して、それぞれの要素に値を格納しています。
// 0番目の要素を取得して出力します。
int i = ints1[0];
System.out.println( i );
// 100
// 要素数を出力します。
System.out.println( ints1.length );
// 3
// このように、配列初期化子で指定した数の要素数を
// 持つことになります。
// 上記の例は、以下と同じです。
int[] ints2 = new int[3];
ints2[0] = 100;
ints2[1] = 200;
ints2[2] = 300;
// 0番目の要素を取得して出力します。
i = ints2[0];
System.out.println( i );
// 100
// つまり、「配列のインスタンスの作成」と、
// 「各要素の初期化」を同時に行っている、
// というわけです。
// 配列初期化子は「初期化子」なので、「配列型変数の初期化」
// の時にしか使用できません。
// ints2 = { 1000, 2000, 3000 };
// コンパイルエラー:
// 配列定数はイニシャライザーにおいてのみ使用可能です。
// 要素の型が異なるとコンパイルエラーとなります。
// int[] ints3 = { 100, 200, 300.0 };
// コンパイルエラー:
// 型の不一致: double から int には変換できません。
// 多次元配列の場合、配列初期化子が入れ子となります。
// int型の二次元配列を作ります。
int[][] intsOfInts
= new int[][]
{
new int[]{ 10, 20, 30 } // intsOfInts[0][0]~intsOfInts[0][2]
, new int[]{ 100, 200, 300 } // intsOfInts[1][0]~intsOfInts[1][2]
};
// 左側の添え字が「『intの配列』を入れる配列」、
// 右側の添え字が『intの配列』になります。
System.out.println( intsOfInts[0][0] );
System.out.println( intsOfInts[0][1] );
System.out.println( intsOfInts[0][2] );
System.out.println( intsOfInts[1][0] );
System.out.println( intsOfInts[1][1] );
System.out.println( intsOfInts[1][2] );
// 10
// 20
// 30
// 100
// 200
// 300
// 配列初期化子の前に、インスタンスの作成と同じ
// 「new 型名[]」を記述することもできます。
// ただし、その際「要素数」は指定しません。
// これが配列初期化子です。
// ← →
int[] ints4 = new int[]{ 100, 200, 300 };
// 0番目の要素を取得して出力します。
i = ints4[0];
System.out.println( i );
// 100
// この形式で要素数を指定するとコンパイルエラー
// となります。
// int[] ints4 = new int[3]{ 100, 200, 300 };
// コンパイルエラー:
// 配列イニシャライザーが提供されているとき、ディメンション式を定義することはできません。
}
}
{
public static void main( String[] args )
{
// int型配列の参照を作ります。
// これが配列初期化子です。
// ← →
int[] ints1 = { 100, 200, 300 };
// ↓ ↓ ↓
// ints[0] ↓ ints[2]
// ints[1]
// 上記の例では、int型配列(要素数3)のインスタンスを
// 作成して、それぞれの要素に値を格納しています。
// 0番目の要素を取得して出力します。
int i = ints1[0];
System.out.println( i );
// 100
// 要素数を出力します。
System.out.println( ints1.length );
// 3
// このように、配列初期化子で指定した数の要素数を
// 持つことになります。
// 上記の例は、以下と同じです。
int[] ints2 = new int[3];
ints2[0] = 100;
ints2[1] = 200;
ints2[2] = 300;
// 0番目の要素を取得して出力します。
i = ints2[0];
System.out.println( i );
// 100
// つまり、「配列のインスタンスの作成」と、
// 「各要素の初期化」を同時に行っている、
// というわけです。
// 配列初期化子は「初期化子」なので、「配列型変数の初期化」
// の時にしか使用できません。
// ints2 = { 1000, 2000, 3000 };
// コンパイルエラー:
// 配列定数はイニシャライザーにおいてのみ使用可能です。
// 要素の型が異なるとコンパイルエラーとなります。
// int[] ints3 = { 100, 200, 300.0 };
// コンパイルエラー:
// 型の不一致: double から int には変換できません。
// 多次元配列の場合、配列初期化子が入れ子となります。
// int型の二次元配列を作ります。
int[][] intsOfInts
= new int[][]
{
new int[]{ 10, 20, 30 } // intsOfInts[0][0]~intsOfInts[0][2]
, new int[]{ 100, 200, 300 } // intsOfInts[1][0]~intsOfInts[1][2]
};
// 左側の添え字が「『intの配列』を入れる配列」、
// 右側の添え字が『intの配列』になります。
System.out.println( intsOfInts[0][0] );
System.out.println( intsOfInts[0][1] );
System.out.println( intsOfInts[0][2] );
System.out.println( intsOfInts[1][0] );
System.out.println( intsOfInts[1][1] );
System.out.println( intsOfInts[1][2] );
// 10
// 20
// 30
// 100
// 200
// 300
// 配列初期化子の前に、インスタンスの作成と同じ
// 「new 型名[]」を記述することもできます。
// ただし、その際「要素数」は指定しません。
// これが配列初期化子です。
// ← →
int[] ints4 = new int[]{ 100, 200, 300 };
// 0番目の要素を取得して出力します。
i = ints4[0];
System.out.println( i );
// 100
// この形式で要素数を指定するとコンパイルエラー
// となります。
// int[] ints4 = new int[3]{ 100, 200, 300 };
// コンパイルエラー:
// 配列イニシャライザーが提供されているとき、ディメンション式を定義することはできません。
}
}
public class Sample { public static void main( String[] args ) { // int型配列の参照を作ります。 // これが配列初期化子です。 // ← → int[] ints1 = { 100, 200, 300 }; // ↓ ↓ ↓ // ints[0] ↓ ints[2] // ints[1] // 上記の例では、int型配列(要素数3)のインスタンスを // 作成して、それぞれの要素に値を格納しています。 // 0番目の要素を取得して出力します。 int i = ints1[0]; System.out.println( i ); // 100 // 要素数を出力します。 System.out.println( ints1.length ); // 3 // このように、配列初期化子で指定した数の要素数を // 持つことになります。 // 上記の例は、以下と同じです。 int[] ints2 = new int[3]; ints2[0] = 100; ints2[1] = 200; ints2[2] = 300; // 0番目の要素を取得して出力します。 i = ints2[0]; System.out.println( i ); // 100 // つまり、「配列のインスタンスの作成」と、 // 「各要素の初期化」を同時に行っている、 // というわけです。 // 配列初期化子は「初期化子」なので、「配列型変数の初期化」 // の時にしか使用できません。 // ints2 = { 1000, 2000, 3000 }; // コンパイルエラー: // 配列定数はイニシャライザーにおいてのみ使用可能です。 // 要素の型が異なるとコンパイルエラーとなります。 // int[] ints3 = { 100, 200, 300.0 }; // コンパイルエラー: // 型の不一致: double から int には変換できません。 // 多次元配列の場合、配列初期化子が入れ子となります。 // int型の二次元配列を作ります。 int[][] intsOfInts = new int[][] { new int[]{ 10, 20, 30 } // intsOfInts[0][0]~intsOfInts[0][2] , new int[]{ 100, 200, 300 } // intsOfInts[1][0]~intsOfInts[1][2] }; // 左側の添え字が「『intの配列』を入れる配列」、 // 右側の添え字が『intの配列』になります。 System.out.println( intsOfInts[0][0] ); System.out.println( intsOfInts[0][1] ); System.out.println( intsOfInts[0][2] ); System.out.println( intsOfInts[1][0] ); System.out.println( intsOfInts[1][1] ); System.out.println( intsOfInts[1][2] ); // 10 // 20 // 30 // 100 // 200 // 300 // 配列初期化子の前に、インスタンスの作成と同じ // 「new 型名[]」を記述することもできます。 // ただし、その際「要素数」は指定しません。 // これが配列初期化子です。 // ← → int[] ints4 = new int[]{ 100, 200, 300 }; // 0番目の要素を取得して出力します。 i = ints4[0]; System.out.println( i ); // 100 // この形式で要素数を指定するとコンパイルエラー // となります。 // int[] ints4 = new int[3]{ 100, 200, 300 }; // コンパイルエラー: // 配列イニシャライザーが提供されているとき、ディメンション式を定義することはできません。 } }