13

Java での変数の初期化について混乱しています。私が理解しているように、クラス変数はデフォルトで初期化されますが、ローカル変数はデフォルトで初期化されません。ただし、 new キーワードを使用してメソッド内に配列を作成すると、デフォルトで初期化されます。これはすべてのオブジェクトに当てはまりますか? new キーワードを使用すると、クラス変数であるかローカル変数であるかに関係なく、オブジェクトが初期化されますか?

4

3 に答える 3

40

Java言語仕様から

各クラス変数、インスタンス変数、または配列コンポーネントは、作成時にデフォルト値で初期化されます (§15.9、§15.10):

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

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

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

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

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

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

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

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

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

于 2013-03-01T19:24:26.743 に答える
5

さらに調査した結果、プリミティブは、メンバー変数である場合にのみ、常にデフォルトに初期化されます。初期化されていない場合、ローカル変数はコンパイル エラーをスローします。

プリミティブの配列を作成すると、それらはすべてデフォルトで初期化されます (これは、ローカル配列とメンバー配列の両方に当てはまります)。オブジェクトの配列は、それぞれをインスタンス化する必要があります。

于 2013-03-01T19:22:34.867 に答える
4

これはすべてのオブジェクトに当てはまりますか? new キーワードを使用すると、クラス変数であるかローカル変数であるかに関係なく、オブジェクトが初期化されますか?

newキーワードを使用する場合。これは、オブジェクトを初期化したことを意味します。メソッドレベルまたはインスタンスレベルで宣言されているかどうかは関係ありません。

public void method(){
Object obj1;// not initialized
Object obj2 = new Object();//initialized
}
于 2013-03-01T19:22:44.493 に答える