Dieser Artikel bietet Ihnen eine ausführliche Einführung in die Addition und den Vergleich von String-Strings. Ich hoffe, dass er für Sie hilfreich ist. helfen.
String-String-Addition und -Vergleich
public static void main(String[] args) { String a = "helloword"; final String b = "hello"; String d = "hello"; String c = b + "word"; String e = d + "word"; String f ="hello"+"word"; System.out.println(a == c); System.out.println(a == e); System.out.println(a == f); }
输出: true false true
Das erste, was klargestellt werden muss, sind die Referenzdaten type = = Was verglichen wird, ist der Adresswert, gleich wird nicht neu geschrieben und was verglichen wird, ist der Inhalt. String wird neu geschrieben, StringBuffer wird nicht neu geschrieben
Zweitens:
a= =c ist wahr, weil b ein Endtyp ist und der genaue Wert während der Kompilierung bekannt sein kann -Zeitkonstante. Das heißt, wenn die endgültige Variable verwendet wird, entspricht sie einem direkten Zugriff auf die Konstante und muss nicht zur Laufzeit bestimmt werden. Daher wird die Variable b im obigen Codeabschnitt, da sie durch final geändert wird, als Compilerkonstante behandelt. Wenn also b verwendet wird, wird die Variable b direkt durch ihren Wert ersetzt. Also ist c = b+"word" gleich c = "hello" + "word". Dasselbe wie ---> Wenn final, wird der Inhalt direkt anstelle der Adresse verglichen.
a ==e ist falsch, weil e = d+"word" tatsächlich ein StringBuffer-Objekt erstellt und dann das StringBuffer-Objekt verwendet, um die Append-Methode auszuführen, um das String-Objekt "ab" zu erstellen, und es dann in konvertiert Zeichenfolge. Aber dieses konvertierte String-Objekt, also das obige s3, wird im Heap platziert. Und s4 ist eine String-Konstante, die im Konstantenpool platziert wird. Was also zurückgegeben wird, ist falsch. ----->Die Adresswerte sind unterschiedlich
a ==f ist wahr, weil: Wenn Konstanten hinzugefügt werden, werden sie während der Kompilierung tatsächlich direkt zu „helloword“ hinzugefügt. Dies ist die Optimierung der JVM Daher sind beim Ausführen die Bytecodes von a und f gleich. Da es im Konstantenpool ein „helloword“ gibt, verweisen die beiden Referenzen auf eine Zeichenfolge „helloword“, sodass das Rückgabeergebnis ebenfalls wahr ist. ----->Zeigen Sie auf dieselbe Adresse
[Verwandte Empfehlungen: Java-Tutorial]
Das obige ist der detaillierte Inhalt vonEinführung in das Hinzufügen und Vergleichen von Zeichenfolgen (ausführlich). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!