Heim  >  Artikel  >  Java  >  Einführung in das Hinzufügen und Vergleichen von Zeichenfolgen (ausführlich)

Einführung in das Hinzufügen und Vergleichen von Zeichenfolgen (ausführlich)

不言
不言nach vorne
2019-04-13 09:36:364082Durchsuche

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen