我正在嘗試使用字典。每當我要檢查,如果一個元素出現在字典中,我這樣做:無法檢查int是否爲空
int value = results.get("aKeyThatMayOrMayNotBePresent");
if (value != null)
// ...
但隨後編譯器說,我不能一個int
比作<nulltype>
。在這種情況下,檢查null
的正確方法是什麼?
我正在嘗試使用字典。每當我要檢查,如果一個元素出現在字典中,我這樣做:無法檢查int是否爲空
int value = results.get("aKeyThatMayOrMayNotBePresent");
if (value != null)
// ...
但隨後編譯器說,我不能一個int
比作<nulltype>
。在這種情況下,檢查null
的正確方法是什麼?
您正在將原始值(int)與null進行比較。由於基元不能爲空,所以應該使用相應的對象,例如在這種情況下的Integer。所以,你應該寫
Integer value = results.get("aKeyThatMayOrMayNotBePresent");
int是原始類型;你可以比較java.lang.Integer
爲空。
得到Object
並檢查它是否爲空。
Object valueObj = results.get("...");
if (valueObj != null)
{
Integer value = (Integer)valueObj;
}
您的空檢查爲時已晚。
int value = results.get("aKeyThatMayOrMayNotBePresent");
該行已經將該引用轉換爲基元int
。如果get的返回值爲null,它將拋出NullPointerException。
正確的方法是使用Integer
而不是int
。
Integer value = results.get("aKeyThatMayOrMayNotBePresent");
這種方式值不會是原始類型,你的空檢查是有效的。
您應該使用Map
而不是Dictionary
,Dictionary
已過時。
隨着Map
可以使用containsKey()
代替,這在我看來是更具可讀性:
if (results.containsKey(key))
{
int value = results.get(key);
[...]
}
根據我的經驗,這是不是比你慢的方法,儘管在地圖表觀雙訪問。如果這個執行經常足以讓性能發揮作用,那麼它就會被優化掉。