2

可能重复:
Java 中空引用上的静态字段

我是 Java 新手。我知道是否有任何对象指向并且如果我们尝试对该对象执行任何操作,JVM 会抛出 Nullpointer 异常。但在我的情况下,没有 Nullpointer 异常请帮助我?下面是我的代码

public class Employee
{

     public static String empName = "John"

     public static void main(String args[])
     {
           Employee emp = new Employee();    
           emp = null;
           System.out.println(emp.empName);
      }   
}

它打印John作为输出,即使 emp 对象指向 null。但我期待一个空指针异常。

4

3 回答 3

5

因为字段是static.
在你的情况下emp.empName等于Employee.empName

于 2012-12-21T15:26:22.980 回答
3

由于您正在访问静态变量,因此如果您的引用引用 null,您将不会获得 NPE。这是因为静态字段绑定到class而不是任何实例。

所以,对于静态变量: -

Employee emp = null;
emp.empName;  // This is evaluated as `Employee.empName;`

因此,仅使用引用类型。无论该引用是指向null还是任何子类对象。

于 2012-12-21T15:27:16.203 回答
0

由于empName静态的,调用将Employee.empName字节码中,因此没有 NPE:

原代码: System.out.println(emp.empName);

字节码: GETSTATIC java/lang/System.out : Ljava/io/PrintStream; GETSTATIC oops/Employee.empName : Ljava/lang/String;

于 2012-12-21T15:27:57.477 回答