Heim > Java > javaLernprogramm > Ändert die Deklaration von Strings als „final' in Java, wie „==' sie vergleicht?

Ändert die Deklaration von Strings als „final' in Java, wie „==' sie vergleicht?

Susan Sarandon
Freigeben: 2024-11-29 15:51:10
Original
228 Leute haben es durchsucht

Does Declaring Strings as `final` in Java Change How `==` Compares Them?

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");
Nach dem Login kopieren

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");
Nach dem Login kopieren

Ü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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage