2013-05-22 29 views
64

私はJavaで作業しています。初期化されていないオブジェクトvs NULLに初期化されたオブジェクト

I一般セットアップなど、いくつかのオブジェクト:

public class Foo { 
    private SomeObject someName; 

    // do stuff 

    public void someMethod() { 
     if (this.someName != null) { 
      // do some stuff 
     } 
    } 
} 

は疑問がある。この例ではsomeNamenullと同一視され、私はreliably for all objectsヌルチェック初期化されていないオブジェクトが正確であると仮定することができますよう、で?明示的に初期化されていない参照型の

答えて

85

修正、静的およびインスタンスの両方のメンバーは、Javaによってnullに設定されています。同じ規則が配列メンバーに適用されます。 Java Language Specificationから

、セクション4.12.5:

変数の初期値

、その値が使用される前に、プログラム内のすべての変数が値を持っている必要があります。

各クラスそれが作成されたときに変数、インスタンス変数、または配列成分を デフォルト値で初期化され

[...]すべての参照型について、デフォルト値はnullです。

上記のルールはローカル変数を除外していることに注意してください。明示的に初期化する必要があります。そうでない場合、プログラムはコンパイルされません。

+0

これは、例えば 'char'にどのように適用されますか? – xorinzor

+1

@xorinzor 'char'にプリミティブ型であるため' null'を代入することはできません。また 'test'を後で代入しないで' char test; 'を実行することはできません。あなたが望むなら 'char test = 'a''を実行するか、メンバー宣言に' '\ 0' 'のデフォルト値を得る' 'char test;のままにしておくことができます。 – dasblinkenlight

9

Object参照が宣言されていてもインスタンス化されていない場合、その値はnullです。

+7

クラスのインスタンスフィールドとしてのみ。 –

+1

@SotiriosDelimanolisごまかしてください。私は覚えようとしています:) – SnakeDoc

+5

@ SnakeDocメソッド本体にObjectを宣言すると、最初に初期化せずにそのオブジェクトを使用しようとすると、コンパイルエラーが発生します。 –

関連する問題