奇怪的代码输出

时间:2015-06-27 01:38:38

标签: java

我偶然发现了一些非常奇怪的代码,我很惊讶不会导致错误

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!谁能解释一下?

1 个答案:

答案 0 :(得分:13)

在编译时解析对类的静态成员的引用。编译器并不关心表达式的值是什么,只关心它的类型,因此((WeirdCode) null).fooField只会像其他任何内容一样解析为WeirdCode.fooField