Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么使用默认值的Java整数会导致NullPointerException?_Java_Exception_Variables_Default Value_Nullpointerexception - Fatal编程技术网

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

为什么使用默认值的Java整数会导致NullPointerException?,java,exception,variables,default-value,nullpointerexception,Java,Exception,Variables,Default Value,Nullpointerexception,我是Java新手。我刚刚读到Java中的类变量有默认值 我尝试了以下程序,希望得到的输出是0,这是整数的默认值,但我得到的是NullPointerException 我错过了什么 class Test{ static Integer iVar; public static void main(String...args) { System.out.println(iVar.intValue()); } } 您是对的,Java中未初始化的类变量具有指定给

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

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

我错过了什么

class Test{
    static Integer iVar;

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

您是对的,Java中未初始化的类变量具有指定给它们的默认值Integer类型与
int
不同
Integer
是一个包装类,它将基元类型
int
的值包装在一个对象中

在您的例子中,
iVar
是对未初始化的
整数
对象的引用。未初始化的引用将获得默认值
null
,当您尝试对null引用应用
intValue
()方法时,将获得
NullPointerException

为了完全避免这个问题,您需要将引用变量引用为
整数
对象:

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

private Integer amount=Integer.valueOf(0);
private Integer points=Integer.valueOf(0);
特别是,为什么要使用
Integer.valueOf(int)
而不是新的整数(int):缓存


valueOf
的这个变体在JDK5中被添加到Byte、Short、Integer和Long中(自JDK1.4以来,它已经存在于布尔值的普通情况中)。当然,所有这些在Java中都是不可变的对象。过去,如果需要int中的整数对象,则需要构造一个新的整数。但是在JDK 5+中,您应该真正使用valueOf,因为Integer现在缓存介于-128和127之间的整数对象,并且每次都可以返回相同的整数(0)对象,而不是在一个全新的相同整数对象上浪费对象构造

谢谢Coddick。现在有道理了。