我是新来的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是尚未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对象浪费的目标建设

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top