int、double等の基本型の変数は利用する際、「int intVal;」と宣言しただけではコンパイルエラーになります。「int intVal = 100;」などと具体的に値を代入する必要があります。配列は、「int intArray[] = new int[10];」と宣言・生成した段階で、配列の各要素に予め初期値が設定されます(int型の配列の場合は、初期値として0が設定されています)。そのため、コンパイルエラーになりません。初期値は、配列の型により異なります。
例3
int intVal;
System.out.println(intVal); //コンパイルエラーになります。
int intArray[] = new int[10];
System.out.println(intArray[0]); //コンパイルエラーにはなりません。0が表示されます。
System.out.println(intArray[1]); //コンパイルエラーにはなりません。0が表示されます。
System.out.println(intArray[2]); //コンパイルエラーにはなりません。0が表示されます。
例えば、String型の配列としてstringArray[]を宣言・生成した場合、配列の各要素には初期値であるnullが設定されています。そのため、このまま利用するとNullPointerExceptionの例外が返されるため、「stringArray[0] = new String("Sunday");」という形で、インスタンスを生成する必要があります。
例5
String[] stringArray = new String[10];
System.out.println(stringArray[0].length());
//配列要素(stringArray[0])のインスタンスの生成を
//行っていないため、例外、NullPointerExceptinが返されます。
String[] stringArray = new String[10];
stringArray[0] = new String("Sunday"); //初期値”Sunday"を持つ、Stringクラスのインスタンスの生成
System.out.println(stringArray[0].length());
//配列要素(stringArray[0])のインスタンスの生成を
//行っているため、正しく実行されます。
String[] stringArray = {"Sunday", "Monday", "Tuesday"};
System.out.println(stringArray[0]);
//初期化子を指定した場合は配列の各要素のインスタンスの
//生成も同時に行われます。