我偶然发现了一些非常奇怪的代码,我很惊讶不会导致错误
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!谁能解释一下?
答案 0 :(得分:13)
在编译时解析对类的静态成员的引用。编译器并不关心表达式的值是什么,只关心它的类型,因此((WeirdCode) null).fooField
只会像其他任何内容一样解析为WeirdCode.fooField
。