2014-03-31 58 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:添加了感謝鏈接。 :)。已經讀過那個。 –