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.