我有两个不同的程序,一个使用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);
}
}
那怎么可能呢?请解释一下。
答案 0 :(得分:3)
原语(例如int
)的默认值为0
,而引用类型(例如Double
)的默认值为null
。< / p>
因此,cost+=b;
会在第一个代码段中抛出NullPointerException
(因为它相当于cost = cost.doubleValue() + b;
),而在第二个代码段中则相当于cost = 0 + b;
,这是{{1}}细
答案 1 :(得分:2)
Double
是double
的包装器。由于在初始化类的实例时,Double
将设置为null
,因此请尝试增加其值(包括取消装箱从Double
到double
会导致NPE。
int
的默认值为0
,因此没有NPE Hurray:)
答案 2 :(得分:1)
在第一个示例中,您使用的是Double类,而在第二个示例中,只使用了原始类型int。我的猜测是你错误地做了它,你可能只是想使用原始类型'double'