java - 为什么在使用空引用访问静态时不出现 NullPointerException?

标签 java static nullpointerexception

<分区>

在下面的代码中,我们在空引用上获取 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);
    }
}

关于java - 为什么在使用空引用访问静态时不出现 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21255684/

相关文章:

java - POI Java Excel解决方案——缩进值

java - 非请求但依赖类的 EAR 类加载说明

c++ - 静态变量总是会耗尽内存吗?

java - java和PHP之间使用static的区别?

java - Hibernate ServiceImplementation抛出NullPointerException

java - dao层空指针异常

java - JDBC – create 语句中出现空指针异常

java - 初始化数组列表的简洁方法

java - Equals 函数在 While 循环中不起作用

无法理解静态变量的行为