我偶然发现了一些很奇怪的代码,我很惊讶并没有引起错误
public class WeirdCode {
public static int fooField = 42;
public WeirdCode getFoo(){
return null;
}
public static void main(String args[]) {
WeirdCode foo = new WeirdCode();
System.out.println(foo.getFoo().fooField);
}
}
令人惊讶的是,它打印出42个!谁能解释?
最佳答案
对类的静态成员的引用在编译时解析。编译器不在乎表达式的值是什么,只在乎它的类型,因此((WeirdCode) null).fooField
像其他任何东西一样解析为WeirdCode.fooField
。