添加到BigDecimal时出现NullPointerException

Dan*_*Dan 1 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

NullPointerException在添加0.99到上面的代码中得到了一个toppingsPrice.我正在处理货币价值,所以我已经习惯了BigDecimal.我如何添加0.99c价格有什么问题吗?

Tud*_*dor 8

您将设置toppingsPrice为null并且从不将其更改为指向某个内容:

    BigDecimal toppingsPrice = null;
    ...
    toppingsPrice.add(new BigDecimal("0.99"));
Run Code Online (Sandbox Code Playgroud)

你的意思是

BigDecimal toppingsPrice = new BigDecimal(0);
Run Code Online (Sandbox Code Playgroud)

  • @Dan:在对对象进行操作之前,必须先将其分配到内存中.您将0.99添加到不存在的对象. (3认同)
  • 更好:`BigDecimal toppingsPrice = BigDecimal.ZERO;`. (3认同)