我在这一行有一个 NullPointerException:

 int qty = mSelectedBottles.get(bottleID);

我已经检查过 mSelectedBottlesbottleID 都不为空。
mSelectedBottlesHashmap<Integer, Integer> 类型,bottleIDint 类型

最佳答案

因为,将空值拆箱为原始数据类型。这里有足够的代码来自己重新创建 NullPointerException

int x;
HashMap<String,Integer> map = new HashMap<String,Integer>();
x = map.get("hello");

不存在的值的自动拆箱是问题所在。

我们知道引入自动装箱是为了使编码更容易,但它是一种明确的性能反模式,可能会导致像这样不直观的恼人错误。

就我个人而言,我总是尝试通过使任何此类调用显式来消除自动装箱,这样虽然代码有点难看,但也更清楚发生了什么。

在将其拆箱为原始 int 之前,您必须检查 mSelectedBottles.get(bottleID) 是否为 null

来自 Java Performance News Letter

10-07 16:17