无法检查整数是否为空

15

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

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

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

但编译器说我不能将一个int<nulltype>进行比较。在这种情况下,检查null的正确方法是什么?

5个回答

24

你正在将一个基本类型值(int)与null进行比较。由于基本类型不能为null,因此应该使用相应的对象,在这种情况下应该使用Integer。所以,你应该写

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

18

您的空值检查太晚了。

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

这行代码已经将引用转换为原始的int类型。如果get()方法返回值为null,会抛出NullPointerException异常。

正确的做法是使用Integer代替int

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

这样的话,值就不会是一个原始类型,并且你的空检查是有效的。


2

int是一种原始类型;你可以将java.lang.Integer与null进行比较。


1
获取Object并检查其是否为空。
Object valueObj = results.get("...");
if ( valueObj != null )
{
    Integer value = (Integer)valueObj;
}

1

你应该使用Map而不是DictionaryDictionary已经过时了。

使用Map,你可以使用containsKey(),在我看来更易读:

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

根据我的经验,尽管表面上需要两次访问地图,但这种方法并不比你的方法慢。如果这个操作被频繁执行以至于性能成为问题,那么它会被优化掉。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接