这是我的示例代码:
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实例的工作原理是什么?
答案 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
。