添加到BigDecimal时出现NullPointerException

时间:2012-03-25 17:13:44

标签: java nullpointerexception

String[] toppings = new String[10];
BigDecimal toppingsPrice = null;

toppings[0] = req.getParameter("extraCheese");
toppings[1] = req.getParameter("moreTomatoes");
toppings[2] = req.getParameter("extraOnions");
// ...

for(int i = 0; i < toppings.length; i++) {
    if(toppings[i] != null) {
        toppingsPrice.add(new BigDecimal("0.99")); // <-- NPE is caused here.
        toppingsPrice = toppingsPrice.setScale(2, BigDecimal.ROUND_HALF_EVEN);
    }
}

在向NullPointerException添加0.99时,我在上面的代码中收到了toppingsPrice。我正在处理货币价值,因此我使用了BigDecimal。我如何添加0.99c价格有什么问题吗?

3 个答案:

答案 0 :(得分:7)

您将toppingsPrice设置为null,并且永远不会将其更改为指向某事:

    BigDecimal toppingsPrice = null;
    ...
    toppingsPrice.add(new BigDecimal("0.99"));

你的意思是

BigDecimal toppingsPrice = new BigDecimal(0);

答案 1 :(得分:1)

您需要初始化toppingsPrice

更改此行

BigDecimal toppingsPrice = null;

BigDecimal toppingsPrice = new BigDecimal(0);

答案 2 :(得分:1)

如果您想看看API,您会看到:

添加(BigDecimal augend)

返回一个BigDecimal,其值为(this + augend),其比例为max(this.scale(),augend.scale())。