Мне было очень странно наблюдать эту ситуацию:
Integer i = null;
String str = null;
if (i == null) { //Nothing happens
...
}
if (str == null) { //Nothing happens
}
if (i == 0) { //NullPointerException
...
}
if (str == "0") { //Nothing happens
...
}
Итак, поскольку я думаю, что операция по боксу выполняется сначала (например, java пытается извлечь значение int из null
), а операция сравнения имеет более низкий приоритет, поэтому возникает исключение.
Вопрос: почему он реализован таким образом в Java? Почему бокс имеет более высокий приоритет, чем сравнение ссылок? Или почему они не выполнили проверку против null
перед боксом?
В настоящий момент он выглядит несовместимым, когда NullPointerException
вызывается с обернутыми примитивами и не генерируется с истинными типами объектов.