在下面的代码中,我们在空引用上获取 i
的值,尽管 NPE
不存在。
public class Test {
static int i = 10;
Test getTest() {
return null;
}
public static void main(String args[]) {
Test t = new Test();
System.out.println(t.getTest());
System.out.println(t.getTest().i);
}
}
输出
null
10
通俗地说,你可以这么想
System.out.println(t.getTest().i);
相当于
System.out.println(Test.i);
因为 i
是静态的。
这可能是最简单的答案。
严格来说,它们并不等价。其实
getTest()
被调用但没有使用它的返回值
用于访问 i
字段,如下面的测试所示。
public class Test {
static int i = 10;
Test getTest() {
System.out.println("Method getTest() called!");
return null;
}
public static void main(String args[]) {
Test t = new Test();
System.out.println(t.getTest());
System.out.println(t.getTest().i);
}
}