无法检查int是否为null

时间:2010-10-30 14:14:56

标签: java dictionary null

我正在尝试使用字典。每当我想检查字典中是否存在元素时,我都这样做:

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

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

然后编译器说我无法将int<nulltype>进行比较。在这种情况下检查null的正确方法是什么?

5 个答案:

答案 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代替DictionaryDictionary已过时。

使用Map,您可以使用containsKey()代替,我认为这更具可读性:

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

根据我的经验,这并不比你的方法慢,尽管对地图有明显的双重访问权限。如果经常执行此操作以使性能更重要,那么它就会被优化掉。