我是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。但我期待一个nullpointer异常。
答案 0 :(得分:5)
因为字段为static
在您的情况下,emp.empName
等于Employee.empName
答案 1 :(得分:3)
由于您正在访问静态变量,因此如果引用引用null,则不会获得NPE。这是因为静态字段绑定到class
而不是任何实例。
因此,对于静态变量: -
Employee emp = null;
emp.empName; // This is evaluated as `Employee.empName;`
因此,仅使用引用类型。无论该引用是指向null
还是指向任何子类对象。
答案 2 :(得分: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;