2016-11-27 6 views
4

これは私が持っているサンプルコードです:JavaのEnum型インスタンス変数のデフォルト値は何ですか?

印刷します
enum A { 
    A, 
} 

class TestA { 
    A a; 
    public static void main(String[] args) { 
     final TestA testA = new TestA(); 
     System.out.println(testA.a); 
     System.out.println(testA.a.A); 
    } 
} 

null 
A 

を初期化されていないインスタンス列挙型変数のデフォルト値は、列挙型の仕事のインスタンスにアクセスしないか、nullの場合?

答えて

7

A.Aは静的変数です。それはnullの場合でも、そのクラスのインスタンスを参照する変数を使用してクラスの静的変数にアクセスするのは悪い考えですが、許可されています。これは列挙型に限定されません。

Integer i = null; 
System.out.println(i.MAX_VALUE); 

しかし、実際には

System.out.println(Integer.MAX_VALUE); 
4

列挙型定数は本質的に静的メンバーです。したがって、静的メンバーとまったく同じ規則に従います。

((System) null).outは、nullを何も使用しないスタティックメンバーアクセスになっているため、NPEを引き起こさない理由はまさにその理由です。

関連する問題