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价格有什么问题吗?
答案 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())。