当我使用int时,NullpointerException是如何抛出的?

时间:2015-10-06 12:12:59

标签: java

我有两个不同的程序,一个使用int而另一个Double。 对于以下代码,我将获得NullpointerException

public class Solution {

    Double cost;
    void addTax(Double b)
    {
        cost+=b;
    }

    public static void main(String[] args)
    {
        new Solution().addTax(30.00);
    }
}

但是对于下面使用int的代码没有得到任何运行时错误。

public class Solution {

    int cost;

    void addTax(int b)
    {
        cost+=b;
    }

    public static void main(String[] args)
    {
        new Solution().addTax(30);
    }
}

那怎么可能呢?请解释一下。

3 个答案:

答案 0 :(得分:3)

原语(例如int)的默认值为0,而引用类型(例如Double)的默认值为null。< / p>

因此,cost+=b;会在第一个代码段中抛出NullPointerException(因为它相当于cost = cost.doubleValue() + b;),而在第二个代码段中则相当于cost = 0 + b;,这是{{1}}细

答案 1 :(得分:2)

Doubledouble的包装器。由于在初始化类的实例时,Double将设置为null,因此请尝试增加其值(包括取消装箱Doubledouble会导致NPE。

int的默认值为0,因此没有NPE Hurray:)

答案 2 :(得分:1)

在第一个示例中,您使用的是Double类,而在第二个示例中,只使用了原始类型int。我的猜测是你错误地做了它,你可能只是想使用原始类型'double'