为什么使用默认值的 Java Integer 会导致 NullPointerException?

我是Java的新手。我刚刚读到Java中的类变量具有默认值。

我尝试了以下程序,并期望将输出为,这是整数的默认值,但我得到了.0NullPointerException

我错过了什么?

class Test{
    static Integer iVar;

    public static void main(String...args) {
        System.out.println(iVar.intValue());
    }
}

答案 1

你是对的,Java中未初始化的类变量具有分配给它们的默认值。 Java 中的类型与 不同。 是将基元类型的值包装在对象中的包装器类。IntegerintIntegerint

在您的情况下,是对尚未初始化的对象的引用。未初始化的引用获取 的默认值,当您尝试对空引用应用 () 方法时,您将获得 .iVarIntegernullintValueNullPointerException

要完全避免此问题,您需要使引用变量将对象引用为:Integer

class Test {
 // now iVar1 refers to an integer object which wraps int 0.
 static Integer iVar1 = new Integer(0);

 // uninitialized int variable iVar2 gets the default value of 0.
 static int iVar2;

 public static void main(String...args) {
  System.out.println(iVar1.intValue()); // prints 0.
  System.out.println(iVar2); // prints 0.
 }
}

答案 2

这意味着为空。在java中,你不能在空引用上调用方法,它会生成你所看到的NullPointerException。iVar