Java中Enum类型实例变量的默认值是什么?

时间:2016-11-27 17:19:57

标签: java enums

这是我的示例代码:

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

如果未初始化的实例Enum变量的默认值为null,那么访问Enum实例的工作原理是什么?

2 个答案:

答案 0 :(得分:7)

A.A是一个静态变量。使用引用该类实例的变量来访问类的静态变量是一个坏主意,但是被授权,即使它是null。这不仅限于枚举:

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

运行正常。但它应该写成

System.out.println(Integer.MAX_VALUE);

答案 1 :(得分:4)

枚举常量本质上是静态成员,因此它们遵循与静态成员完全相同的规则。

它起作用的原因正是((System) null).out不会导致NPE的原因,因为它变成了静态成员访问,不会以任何方式使用null