Warum kann ein Vergleich von Integer mit int eine NullPointerException in Java auslösen?

s war sehr verwirrend für mich, diese Situation zu beobachten:

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

So, wie ich denke, wird die Boxoperation zuerst ausgeführt (d. H. Java versucht, den int-Wert aus @ zu extrahierenull) und Vergleichsoperation hat niedrigere Priorität, deshalb wird die Ausnahme ausgelöst.

Die Frage ist: Warum ist es so in Java implementiert? Warum hat Boxen eine höhere Priorität als der Vergleich von Referenzen? Oder warum haben sie keine Überprüfung gegen @ implementiernull vor dem Boxen?

Im Moment sieht es inkonsistent aus, wennNullPointerException wird mit eingepackten Primitiven geworfen und wird nicht mit @ geworfwah Objekttypen.

Antworten auf die Frage(12)

Ihre Antwort auf die Frage