Невозможно проверить, является ли int null

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

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

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

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

Ответы

Ответ 1

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

Ответ 4

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

Object valueObj = results.get("...");
if ( valueObj != null )
{
    Integer value = (Integer)valueObj;
}

Ответ 5

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

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

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

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