¿Por qué comparar Integer con int puede lanzar NullPointerException en Java?

Fue muy confuso para mí observar esta situación:

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

Entonces, como creo que la operación de boxeo se ejecuta primero (es decir, Java intenta extraer el valor int denull) y la operación de comparación tiene menor prioridad, por eso se lanza la excepción.

La pregunta es: ¿por qué se implementa de esta manera en Java? ¿Por qué el boxeo tiene mayor prioridad que comparar referencias? ¿O por qué no implementaron la verificación contranull antes del boxeo?

Por el momento parece inconsistente cuandoNullPointerException se arroja con primitivas envueltas y no se arroja concierto tipos de objeto

Respuestas a la pregunta(6)

Su respuesta a la pregunta