Vergleichen von Zeichenfolgen mit ==, wenn sie in Java als endgültig deklariert werden
In Java vergleicht der ==-Operator die Speicherreferenzen zweier Objekte. Wenn Zeichenfolgen jedoch als endgültig deklariert und mit Konstanten zur Kompilierungszeit initialisiert werden, tritt ein einzigartiges Verhalten auf.
Szenario 1: Nicht endgültige Zeichenfolgen
Bedenken Sie den folgenden Code segment:
String str1 = "str"; String str2 = "ing"; String concat = str1 + str2; System.out.println(concat == "string");
Das Ergebnis dieses Codes wäre falsch. Durch die Verkettungsoperation wird ein neues String-Objekt erstellt, das nicht mit dem bereits vorhandenen String-Literal „string“ übereinstimmt.
Szenario 2: Endgültige Strings
Jetzt lasst uns Deklarieren Sie die Zeichenfolgen als endgültig:
final String str1 = "str"; final String str2 = "ing"; String concat = str1 + str2; System.out.println(concat == "string");
Überraschenderweise ist das Ergebnis jetzt wahr. Dies liegt daran, dass der Compiler durch die Deklaration der Zeichenfolgen als endgültig ihre Werte einbinden und den gesamten Ausdruck als konstanten Ausdruck zur Kompilierungszeit behandeln kann.
Compileroptimierung: Internierung
Wenn ein Konstantenausdruck zur Kompilierungszeit einen String beinhaltet, „interniert“ ihn die Java Virtual Machine (JVM), was bedeutet, dass sie eine eindeutige Instanz des Strings an einem speziellen Ort namens String speichert Pool. Somit wird die verkettete Zeichenfolge im zweiten Szenario direkt mit der internierten Zeichenfolge „string“ verglichen, was zu einem echten Ergebnis führt.
Fazit
Strings als endgültig deklarieren mit Konstanten zur Kompilierungszeit führen dazu, dass der Optimierer den Ausdruck als einzelnes String-Objekt behandelt, was syntaktische Gleichheitsprüfungen (==) mit bereits vorhandenen String-Literalen ermöglicht. Dies demonstriert die Compileroptimierung in Java und wie sie sich auf Objektidentitätsvergleiche auswirken kann.
Das obige ist der detaillierte Inhalt vonÄndert die Deklaration von Strings als „final' in Java, wie „==' sie vergleicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!