我在这一行有一个NullPointerException
:
int qty = mSelectedBottles.get(bottleID);
我已检查过mSelectedBottles
和bottleID
都是空的。
mSelectedBottles
的类型为Hashmap<Integer, Integer>
,bottleID
的类型为int
答案 0 :(得分:10)
因为,将null值取消装箱到原始数据类型。这里有足够的代码来重新创建NullPointerException
你自己
int x;
HashMap<String,Integer> map = new HashMap<String,Integer>();
x = map.get("hello");
不存在值的自动取消装箱是问题。
我们知道自动装箱是为了使编码更容易,但它是一种明确的性能反模式,并且可能导致像这样的非常直观的烦恼。
就个人而言,我总是试图通过明确地进行任何此类调用来删除自动装箱,这样虽然代码有点丑陋,但它也更清楚发生了什么。
在将其取消装箱到原始int
之前,您必须检查mSelectedBottles.get(bottleID)
是否为空