为什么在NullPointerException中使用默认值的Java Integer结果?

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

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

我错过了什么?

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

你是对的,Java中未初始化的类变量具有分配给它们的默认值。 Java中的Integer类型与intInteger是包装类,它在对象中包装基本类型int的值。

在您的情况下, iVar是对尚未初始化的Integer对象的引用。 未初始化的引用获取默认值null ,当您尝试在null引用上应用intValue ()方法时,您将获得NullPointerException

要完全避免这个问题,您需要将引用变量引用为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. } } 

这意味着iVar为空。 在java中,您无法在空引用上调用方法,它会生成您正在看到的NullPointerException。