我偶然发现了一些很奇怪的代码,我很惊讶并没有引起错误

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

08-16 04:54