Por que comparar Integer com int pode gerar NullPointerException em Java?

Foi muito confuso para mim observar esta situação:

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
   ...
}

Então, como eu acho que a operação de boxe é executada primeiro (ou seja, java tenta extrair o valor int denull) e a operação de comparação tem prioridade mais baixa, por isso a exceção é lançada.

A questão é: por que é implementado dessa maneira em Java? Por que o boxe tem maior prioridade do que comparar as referências? Ou por que eles não implementaram a verificação contranull antes do boxe?

No momento, parece inconsistente quandoNullPointerException é jogado com primitivas embrulhadas e não é jogado comverdadeiro tipos de objetos.

questionAnswers(6)

yourAnswerToTheQuestion