Почему сравнение Integer с int может вызвать исключение NullPointerException в Java?
Мне было очень странно наблюдать за этой ситуацией:
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
брошен с завернутыми примитивами и не брошен справда типы объектов.