2014-03-31 27 views
4

我有一个NullPointerException在这条线:的NullPointerException在哈希映射的get方法

int qty = mSelectedBottles.get(bottleID); 

我检查了mSelectedBottlesbottleID都是NOT NULL。

mSelectedBottlesHashmap<Integer, Integer>类型的,并且是bottleID类型的int

+1

后的完整代码之前空或不是。否则难以看到 –

+0

发布完整例外将有助于理解您的问题。 – Arne

回答

10

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

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

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

我们知道自动装箱是为了简化编码而引入的,但它是一种明确的性能反模式,可能会导致像这样非直观的烦人错误。

就我个人而言,我总是尝试通过使任何此类调用显式地移除自动装箱,以便尽管代码有点丑陋,但它也更清楚发生了什么。

你必须检查mSelectedBottles.get(bottleID)是拆箱到原始INT

Java Performance News Letter

+3

清晰完美! :) – TheLostMind

+3

在复制粘贴的情况下提供答案的来源总是很好的:http://www.javaperformancetuning.com/news/news159.shtml –

+1

@JunedAhsan:添加了感谢链接。 :)。已经读过那个。 –