Невозможно проверить, является ли 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);
[...]
}
По моему опыту это не медленнее, чем ваш подход, несмотря на очевидный двойной доступ к карте. Если это выполняется достаточно часто для обеспечения производительности, тогда оно оптимизировано.