Java 奇怪代码输出
我偶然发现了一些非常奇怪的代码,我很惊讶这些代码不会导致错误Java 奇怪代码输出,java,Java,我偶然发现了一些非常奇怪的代码,我很惊讶这些代码不会导致错误 public class WeirdCode { public static int fooField = 42; public WeirdCode getFoo(){ return null; } public static void main(String args[]) { WeirdCode foo = new WeirdCode(); S
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
就像其他任何东西一样,只是解决了古怪的代码.fooField
。你期望它会返回什么?@ReutSharabani我想它会抛出一个nullpointerexception我想底层投票者并没有完全阅读代码。这是个不错的问题。我当然认为它会扔出去。谢谢你让我学到了一些新东西+1@sstan谢谢,我很高兴我们都学到了一些新的东西