Hashmap的get方法中的NullPointerException

0xS*_*ina 5 java

我有一个NullPointerException在这一行:

 int qty = mSelectedBottles.get(bottleID);
Run Code Online (Sandbox Code Playgroud)

我已经检查过,mSelectedBottles并且bottleID都不是空的.

mSelectedBottles是类型Hashmap<Integer, Integer>bottleID类型int

Abi*_*san 11

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

int x;
HashMap<String,Integer> map = new HashMap<String,Integer>();
x = map.get("hello");
Run Code Online (Sandbox Code Playgroud)

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

我们知道引入自动装箱是为了使编码更容易,但它是一种明确的性能反模式,并且可能导致像这样的非常直观的烦恼.

就个人而言,我总是尝试通过明确地进行任何此类调用来删除自动装箱,因此尽管代码有点丑陋,但它更清楚地发生了什么.

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

来自Java Performance News Letter

  • 在复制粘贴的情况下,提及答案的来源总是很好:http://www.javaperformancetuning.com/news/news159.shtml (3认同)