为什么使用缺省值的Java整数结果在一个NullPointerException?
-
19-09-2019 - |
题
我是新来的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
是尚未initiliazed一个Integer
对象的引用。未初始化的引用得到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中,不能调用上的空引用的方法,它产生您所看到的空指针异常。
private Integer amount=Integer.valueOf(0);
private Integer points=Integer.valueOf(0);
在特定的,为什么你应该使用Integer.valueOf(int)
,而不是新的整数(INT):CACHING
valueOf
的这种变型在JDK 5加入到字节,短,Integer和Long(它已经存在在简单的情况中,因为布尔JDK 1.4)。所有这些都是,当然,在Java中不可变对象。以前是,如果你从一个int需要一个Integer对象,你会构造一个新的整数。但在JDK 5+,你应该使用的valueOf,因为整数现在缓存Integer对象-128到127之间,可以交给你回来完全相同的整数(0)对象的时候,而不是一个全新的相同的Integer对象浪费的目标建设
不隶属于 StackOverflow