Heim >Java >javaLernprogramm >Warum ändert die Neuzuweisung einer String-Variablen in Java nicht den Wert des ursprünglichen Strings?

Warum ändert die Neuzuweisung einer String-Variablen in Java nicht den Wert des ursprünglichen Strings?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-19 11:55:14464Durchsuche

Why does reassigning a String variable in Java not change the original string's value?

String ist unveränderlich: Das Konzept verstehen

In Java sind Strings unveränderlich, was bedeutet, dass ihr Inhalt nicht direkt geändert werden kann. Dieses Konzept kann jedoch verwirrend sein, wenn wir Code beobachten wie:

String a = "a";
System.out.println("a 1-->" + a);
a = "ty";
System.out.println("a 2-->" + a);

Ausgabe:

a 1-->a  
a 2-->ty

Was passiert eigentlich?

Trotzdem Wenn Sie a einen neuen Wert zuweisen, zeigt die Ausgabe den ursprünglichen Wert. Dieser scheinbare Widerspruch ergibt sich aus der Unveränderlichkeit von Strings. Wenn einer Referenzvariablen eine neue Zeichenfolge zugewiesen wird, wird ein neues Zeichenfolgenobjekt erstellt und die Referenz aktualisiert, um auf das neue Objekt zu verweisen. Der ursprüngliche String bleibt unverändert.

Wie Strings funktionieren

Um dies besser zu verstehen, erkunden wir die Funktionalität der String-Klasse:

  • Erstellen eines Strings: String str = „knowledge“ erstellt ein String-Objekt mit dem Wert „knowledge“ und weist ihm einen Referenz-Str zu it.
  • Zuweisen einer Referenz: String s = str erstellt eine neue Referenz s, die auf dasselbe String-Objekt zeigt.
  • Änderungsversuch: str = str.concat(" base") hängt konzeptionell an „base“ zu str, aber da Strings unveränderlich sind, wird ein neues String-Objekt mit dem Wert „knowledge base“ erstellt und der Referenz-Str wird so aktualisiert, dass er darauf zeigt it.

Speicherverwaltung und der String-Konstanten-Pool

String-Literale sind in Anwendungen häufig und können viel Speicher belegen. Um die Speichernutzung zu optimieren, verwaltet die Java Virtual Machine (JVM) einen „String-Konstanten-Pool“, der alle String-Literale speichert. Wenn ein Zeichenfolgenliteral gefunden wird, überprüft der Compiler den Pool auf eine vorhandene Übereinstimmung. Wenn der Verweis gefunden wird, wird er auf die vorhandene Zeichenfolge verwiesen, wodurch die Erstellung eines neuen Objekts vermieden wird.

Die Bedeutung der Unveränderlichkeit

Die Unveränderlichkeit von Zeichenfolgen spielt eine entscheidende Rolle im Gedächtnis Management. Da Verweise auf Zeichenfolgen auf dasselbe zugrunde liegende Objekt verweisen können, würde sich eine Änderung des Inhalts eines Strings auf alle Verweise auswirken. Daher stellt die Unveränderlichkeit sicher, dass die ursprüngliche Zeichenfolge erhalten bleibt, auch wenn ihre Referenz geändert wird.

Finalität der String-Klasse

Um Überschreibungen zu verhindern, die die Unveränderlichkeit der Zeichenfolge beeinträchtigen könnten, wird die Die String-Klasse ist als final markiert. Dies bedeutet, dass keine andere Klasse ihr Verhalten erben und ändern kann.

Zusammenfassung

Strings sind in Java unveränderlich. Wenn eine Referenzvariable, die auf ein String-Objekt zeigt, neu zugewiesen wird, wird ein neues String-Objekt erstellt, wodurch die Referenz effektiv aktualisiert wird, anstatt das vorhandene Objekt zu ändern. Unveränderlichkeit ist für die Speichereffizienz und die Gewährleistung der Konsistenz zwischen Referenzen, die auf denselben Zeichenfolgenwert verweisen, von entscheidender Bedeutung.

Das obige ist der detaillierte Inhalt vonWarum ändert die Neuzuweisung einer String-Variablen in Java nicht den Wert des ursprünglichen Strings?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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