2010-10-30 66 views
15

我正在嘗試使用字典。每當我要檢查,如果一個元素出現在字典中,我這樣做:無法檢查int是否爲空

int value = results.get("aKeyThatMayOrMayNotBePresent"); 

if (value != null) 
    // ... 

但隨後編譯器說,我不能一個int比作<nulltype>。在這種情況下,檢查null的正確方法是什麼?

回答

24

您正在將原始值(int)與null進行比較。由於基元不能爲空,所以應該使用相應的對象,例如在這種情況下的Integer。所以,你應該寫

Integer value = results.get("aKeyThatMayOrMayNotBePresent"); 
2

int是原始類型;你可以比較java.lang.Integer爲空。

1

得到Object並檢查它是否爲空。

Object valueObj = results.get("..."); 
if (valueObj != null) 
{ 
    Integer value = (Integer)valueObj; 
} 
18

您的空檢查爲時已晚。

int value = results.get("aKeyThatMayOrMayNotBePresent"); 

該行已經將該引用轉換爲基元int。如果get的返回值爲null,它將拋出NullPointerException。

正確的方法是使用Integer而不是int

Integer value = results.get("aKeyThatMayOrMayNotBePresent"); 

這種方式值不會是原始類型,你的空檢查是有效的。

1

您應該使用Map而不是Dictionary,Dictionary已過時。

隨着Map可以使用containsKey()代替,這在我看來是更具可讀性:

if (results.containsKey(key)) 
{ 
    int value = results.get(key); 
    [...] 
} 

根據我的經驗,這是不是比你慢的方法,儘管在地圖表觀雙訪問。如果這個執行經常足以讓性能發揮作用,那麼它就會被優化掉。