In Java löst das Verketten eines Null-Strings mit einem anderen String keine NullPointerException aus, wie es vielleicht der Fall wäre erwarten. Stattdessen ist das Ergebnis eine neue Zeichenfolge mit vorangestelltem „null“.
Gemäß der Java Language Specification (JLS ):
"Wenn der Verweis [auf die Nullzeichenfolge] null ist, wird er in umgewandelt Zeichenfolge „null“ (vier ASCII-Zeichen n, u, l, l).Wie wird dieses Verhalten implementiert?
Der Compiler optimiert die Zeichenfolge Verkettung zur Verbesserung der Leistung. Dazu wird ein StringBuilder-Objekt verwendet, um die Verkettungsergebnisse zu akkumulieren.Wenn eine Nullzeichenfolge auftritt:Wenn die Nullzeichenfolge das erste Argument ist, wird String.valueOf( aufgerufen. ), um ihn in einen Nicht-Null-String („null“) umzuwandeln.
Wenn der Null-String nicht das erste Argument ist, wird der Null-String an den StringBuilder angehängt und Ruft dann String.valueOf() für das Ergebnis auf.
Betrachten Sie den folgenden Code:Beispiel
The Der Compiler optimiert diesen Code in das folgende Äquivalent:
String s = null; s = s + "hello"; System.out.println(s); // prints "nullhello"Nach dem Login kopierenDa s null ist, String.valueOf(s) gibt „null“ zurück, das dann an den StringBuilder angehängt und in einen String konvertiert wird.
Das obige ist der detaillierte Inhalt vonWarum löst die Verkettung einer Nullzeichenfolge in Java keine NullPointerException aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!