mutao.net

いわゆる雑記。

配列型の変数宣言と初期化

正しい変数宣言と初期化(インスタンス化)

  • 変数宣言
int[] array;
int array[];
//2次元型
int[][] array; 
int array [][];
int[] array[];
//3次元型(これも大丈夫)
int[][] array[];
int[] array = new int[3];

int[] array = new int[3][];
array[0] = new int [3];
array[1] = new int [3];
array[2] = new int [3];

コンパイルエラーになるもの

  • 配列インスタンスへの参照を入れるだけで、参照先の配列がいくつ要素を扱えるかは関係ない
  • 配列型変数を宣言するときは要素数を指定することはできない
int[2] array;
  • 配列インスタンスを生成する場合は要素数を指定しなけばならない
  • また要素数の指定は整数値でなければならない
int[] array = new int[];
int[] array = new int[2.5];
int[][] array = new int[][3];
  • また次元数を一致させなければいけない
int a[] = new int[2][3];

ちなみに

int [] array = new int [0];
System.out.println(array);
  • 要素がない配列のインスタンス宣言
  • この場合ハッシュコードが出力される
  • 配列クラスはObjectクラスを継承しており、Object.toStringメソッドは以下のような定義になっているためハッシュコードが出力される
public String toString() {
  return getClass().getName+ "@" + Intger.toHexString(hashCode());
}

配列の宣言と初期化の問題が出た場合

  • 変数宣言時に [] があるかどうか
// アウト
int array = new int[2];
  • 変数宣言時に要素数を指定していないかどうか
// アウト
int array[2];
// インスタンス化していないのでアウト
int [] array;
array = int[2];
  • インスタンスの生成時に要素数を指定しているかどうか
  • [] 以外のカッコを使っていないか