Не могу проверить, является ли int нулем - PullRequest
15 голосов
/ 30 октября 2010

Я пытаюсь использовать словарь.Всякий раз, когда я хочу проверить, присутствует ли элемент в словаре, я делаю это:

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

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

Но тогда компилятор говорит, что я не могу сравнить int с <nulltype>.Как правильно проверить null в этом случае?

Ответы [ 5 ]

24 голосов
/ 30 октября 2010

Вы сравниваете примитивное значение (int) с нулем.Поскольку примитивы не могут быть нулевыми, вы должны использовать соответствующий объект, такой как Integer в этом случае.Итак, вы должны написать

Integer value = results.get("aKeyThatMayOrMayNotBePresent");
18 голосов
/ 30 октября 2010

Ваш нулевой чек слишком поздно.

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

Эта строка уже преобразует ссылку в примитив int. Он выдаст исключение NullPointerException, если возвращаемое значение get равно нулю.

Правильный способ будет использовать Integer вместо int.

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

В этом случае значение не будет примитивным типом, и ваша нулевая проверка действительна.

2 голосов
/ 30 октября 2010

int - примитивный тип; Вы можете сравнить java.lang.Integer с нулем.

1 голос
/ 30 октября 2010

Вы должны использовать Map вместо Dictionary, Dictionary устарело.

С Map вы можете использовать containsKey(), что, на мой взгляд, более читабельно:

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

По моему опыту, это не медленнее, чем ваш подход, несмотря на очевидный двойной доступ к карте. Если это выполняется достаточно часто, чтобы производительность имела значение, то она оптимизируется.

1 голос
/ 30 октября 2010

Получите Object и проверьте, является ли это нулем.

Object valueObj = results.get("...");
if ( valueObj != null )
{
    Integer value = (Integer)valueObj;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...