こんにちは。くまごろーです。
Java Silver対策勉強の一環として、今回は配列の規則についてまとめようと思います。
1 Javaの配列の特徴
Javaの配列は、配列クラスから作成された「インスタンス」であり、値の集合を扱うことを目的としている。値そのものと、値の集合を扱うインスタンスは異なるものである。
<主な特徴>
・ 同じ型、もしくは互換性のある型の値しか扱えない。
・ 扱える要素数はインスタンス生成時に決定し、生成後に要素数を変更することはできない。
※ 配列には、プリミティブ型の要素を持つものとオブジェクト型の要素を持つものの2種類がある。プリミティブ型は要素で値そのものを扱っており、オブジェクト型は要素として参照を扱っている。
配列を利用するには、「配列インスタンスの生成」「初期化」「配列型変数の宣言」「参照の代入」といった作業が必要になる。
<コード例>
int[] array = new int[3]; array[0] = 1; array[1] = 2; array[2] = 3;
上記を細分すると・・・
/*配列型変数の宣言*/ int[] array; /*配列インスタンスの生成*/ new int[3]; /*配列の初期化・参照の代入*/ array[0] = 1; array[1] = 2; array[2] = 3;
2 配列型変数の宣言方法
(1)基本の形
[ ]を使用して宣言する。
int[] array;
(2)大カッコ[ ]の記述箇所
この[ ]は、データ型の後ろだけでなく、変数名の後ろに記述することもできる。
int array[];
(3)多次元配列の場合
多次元配列の場合も、(2)は適用される。
int[][] array; int array[][]; //変数名の後ろでもok
※ 多次元配列の場合は、[ ]をデータ型と変数名の後ろに分けて記述することも可能
int[] array[]; //2次元配列 int[][] array[]; //3次元配列
(4)配列型変数宣言時に、要素数は指定できない。
配列型変数には、配列インスタンスへの参照を代入するだけで、要素数を指定することはできない。
int[2] array; //コンパイルエラー
3 配列インスタンスの生成
配列インスタンス生成時には、必ず要素数を指定しなければならない。
また、要素数の指定は、整数値(int型)でなければならない。(long型は使用できない)
int[] array = new int[] //要素数を指定していないのでコンパイルエラー int[] array = new int[2.3] //浮動小数点数もコンパイルエラー
また、以下の様なコードも使用可能。
int array[] = new int[ 4 * 3 ] int a = 2, b = 6; int[] array = new int[ a * b];
int array[] = new int[0];
4 初期化子の使用方法
初期化子「{}」を使用すれば、配列インスタンスの生成、初期化、配列型変数の宣言、参照の代入といった作業を一度に行うことが出来る。
<基本>
int[] array = { 3, 4, 5 }; int[] array = new int[]{ 3, 4, 5 }; //[]の中は空欄でないとダメ int[] array = new int[3]{ 3, 4, 5 }; //[]内に値を記述するとコンパイルエラーになる
<多次元配列の場合>
int[][] array = {{ 2, 3 },{ 4, 5 }};
※ 初期化子を使用した場合も要素数ゼロの配列インスタンスを生成できる。
<基本>
int[] array = {}; int[] array = new int[0];
<多次元配列の場合>
int[][] array = {}; int[][] array = new int[][]{};
※ 初期化子を使って配列インスタンスの生成・初期化を同時に行う場合、セミコロンを使用して変数宣言・参照の代入を別々に記述することはできない。
int[][] array; array = new int{}; //コンパイルエラー
5 要素のデフォルト値について
下記のように配列インスタンスを生成した時、要素の中身はまだ何も設定されていない。
int[] array = new int[3];
配列の要素のデフォルト値は以下の様に設定されていて、配列インスタンス生成直後は要素がこの値で初期化されている。
型 | デフォルト値 |
---|---|
整数型 | 0 |
浮動小数点数型 | 0.0 |
真偽型 | false |
文字型 | ¥u0000 |
オブジェクト型 | null |
※ オブジェクト型について
public class Sample{ int number = 10; }
public class Main{ public static void main(String[] args){ Sample[] sample = new Sample[3]; int a = sample[2].number; } }
この場合、生成しているのは配列インスタンスであって、Sampleのインスタンスを生成しているわけではないので、要素としてオブジェクト型のデフォルト値「null」で初期化されている。そのため、変数の参照先がなく、NullPointerExceprtionが発生する。
6 cloneメソッドを使用した配列のコピー
cloneメソッドを使用すると、同じ値を持った配列インスタンスが複製される。
int[] arrA = { 1, 2, 3 }; int[] arrB = arrA.clone();
ただし、その配列が多次元配列の場合、コピーされるのは1次元目の配列のみである。
二次元目以降は、arrAとarrB、別々の配列から同じインスタンスを参照する形になる。
[java] Java SE 8 Silver メモ - Qiita