Hier ist meine Klasse, wo ich zwei Saiten verkette.
String-Verkettung mit null
mit + -Operator wird problemlos ausgeführt, aber löst NullPointerException
mit concate()
method aus.
kann mir jemand den Grund dafür sagen?
Fall 1:
%Vor%Aus den Dokumenten (String-Konvertierung)
Wenn die Referenz null ist, wird sie in die Zeichenfolge "null" (vier) konvertiert ASCII-Zeichen n, u, l, l).
Andernfalls wird die Konvertierung wie durch einen Aufruf von toString-Methode des referenzierten Objekts ohne Argumente; aber wenn das Ergebnis des Aufrufs der toString-Methode ist null, dann die Zeichenfolge "null" wird stattdessen verwendet.
Fall 2:
%Vor% Wenn Sie die source von concat(String str)
es verwendet str.length();
, also wäre es wie null.length()
, was dir ein NullPointerException
gibt.
String.concat()
benötigt ein Objekt vom Typ String
als Parameter.
Es gibt keinen Typ, bei dem null
ein instanceof
ist. Siehe JLS:
15.20.2 Typvergleichsoperator instanceof
Relationale Expression: RelationalExpression-Instanz von ReferenceType Zur Laufzeit ist das Ergebnis des instanceof-Operators wahr, wenn der Wert der RelationalExpression nicht null ist und die Referenz in den ReferenceType umgewandelt werden kann, ohne dass eine ClassCastException ausgelöst wird. Ansonsten ist das Ergebnis falsch.
concate()
Methode erstellt new String()
Objekt unter der Haube.
wobei +
combinates \ Werte verkettet, indem toString()
method verwendet wird. Deshalb verwenden wir +
continents "somevalue".append(null).toString()
.
für Referenz siehe diese Frage.
Die Klasse String
enthält ein Array (wahrscheinlich ein ArrayList
) von Zeichen. Wenn Sie .concat()
aufrufen, geht es durch und fügt jedes Zeichen aus der zweiten Zeichenfolge zur ersten hinzu.
Wenn der erste String null
ist, gibt es nichts hinzuzufügen, was zu einem NullPointer Exception
führt. Versuchen Sie, String
s mit ""
zu initialisieren.
@Blip: 1) null + "ABC"
Gerade Antwort auf Ihre Frage ist + Operator in Java verwendet StringBuilder.append-Methode, um die Zeichenfolgen zu concat.
Und StringBuilder.append () -Methode behandelt Null-Objekt als "Null" String. Daher gibt Null + "ABC" keine Nullzeiger-Ausnahme, sondern gibt nullABC aus.
2) String.concat ()
Und ja, vor der string.length () Methode in der concat () Funktion der String Klasse gibt es keinen Null-Check. Daher wird eine Nullzeigerausnahme ausgelöst.
Hoffe das beantwortet Ihre Frage.