1

どうして

int alone;
System.out.println(alone);

エラーが発生しますが、

 int[] arr = new int[1];
 System.out.println(arr[0]);

0 ですか? 空の配列を初期化すると、その内容は自動的に 0 (または null など) に初期化されますか?

4

5 に答える 5

6

言語標準から

それ以外の場合、指定された長さの 1 次元配列が作成され、配列の各コンポーネントがデフォルト値に初期化されます (§ 4.12.5 )。

デフォルト値は次のとおりです。

  • タイプ byte の場合、デフォルト値はゼロ、つまり (byte)0 の値です。

  • short 型の場合、デフォルト値はゼロ、つまり (short)0 の値です。

  • int 型の場合、デフォルト値はゼロ、つまり 0 です。

  • long 型の場合、デフォルト値はゼロ、つまり 0L です。

  • float 型の場合、デフォルト値は正のゼロ、つまり 0.0f です。

  • double 型の場合、既定値は正のゼロ、つまり 0.0d です。

  • char 型の場合、デフォルト値はヌル文字、つまり '\u0000' です。

  • ブール型の場合、デフォルト値は false です。

  • すべての参照型 (§ 4.3 ) について、デフォルト値は null です。

于 2012-10-31T21:04:38.667 に答える
4

はい、プリミティブ型 (boolean と char を除く) の場合、デフォルトで ZERO になります。オブジェクト タイプの場合、デフォルトは になりますnull

このJava チュートリアルが役立つ場合があります。

注:woot4Mooが答えたように、これはインスタンス変数のみです。ローカル変数の場合、デフォルトにはなりません。

于 2012-10-31T20:45:19.973 に答える
2

ここには、同様の問題が 2 つあります。最初に、すべての変数タイプにはデフォルト値があり、タイプによって異なることに注意してください。これらのデフォルトが使用される場面が少なくとも 2 つあります。1) メンバー変数の宣言と、2)new演算子による配列の初期化です。

ローカル配列変数を で初期化せずに単に宣言すると、単純な変数newを宣言したときと同じエラーが発生することに注意してください。intこれは、すべてのローカル変数を初期化する必要があるためです。自動デフォルト値は取得されません。

一方、メンバー変数はデフォルト値を取得します。同様に、演算子を使用して配列オブジェクトを作成すると、配列newの要素が適切な既定値に初期化されます。

于 2012-10-31T20:59:22.633 に答える
2

はい、プリミティブ型number arraysの場合、、0forboolean[]で初期化します。falsechar[]NULL(ASCII value 0)objects [] including String[]null

于 2012-10-31T20:45:46.173 に答える
1

それが宣言された場所に依存します (関数内のクラスの副の中)。クラスメンバー変数の場合、デフォルトに初期化されます。数値型の場合は 0 (float 型 / double の場合は 0.0)、文字列の場合は null、ブール値の場合は false、オブジェクトの場合は null。関数内で宣言されている場合、 の場合は初期化されないままになりint aloneます。配列に関しては、常にその中に含まれる値を初期化します。

于 2012-10-31T20:46:47.790 に答える