为什么在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
类型与int
。 Integer
是包装类,它在对象中包装基本类型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。