我正在尝试使用字典。每当我想检查字典中是否存在元素时,我都这样做:
int value = results.get("aKeyThatMayOrMayNotBePresent");
if (value != null)
// ...
然后编译器说我无法将int
与<nulltype>
进行比较。在这种情况下检查null
的正确方法是什么?
答案 0 :(得分:24)
您将原始值(int)与null进行比较。由于基元不能为空,因此应使用相应的对象,例如本例中的Integer。所以,你应该写
Integer value = results.get("aKeyThatMayOrMayNotBePresent");
答案 1 :(得分:18)
您的空检查为时已晚。
int value = results.get("aKeyThatMayOrMayNotBePresent");
此行已将引用转换为基元int
。如果get的返回值为null,它将抛出NullPointerException。
正确的方法是使用Integer
代替int
。
Integer value = results.get("aKeyThatMayOrMayNotBePresent");
这种方式的值不是原始类型,并且您的空检查有效。
答案 2 :(得分:2)
int是原始类型;您可以将java.lang.Integer
与null进行比较。
答案 3 :(得分:1)
获取Object
并检查是否为空。
Object valueObj = results.get("...");
if ( valueObj != null )
{
Integer value = (Integer)valueObj;
}
答案 4 :(得分:1)
您应该使用Map
代替Dictionary
,Dictionary
已过时。
使用Map
,您可以使用containsKey()
代替,我认为这更具可读性:
if (results.containsKey(key))
{
int value = results.get(key);
[...]
}
根据我的经验,这并不比你的方法慢,尽管对地图有明显的双重访问权限。如果经常执行此操作以使性能更重要,那么它就会被优化掉。