Warum Strings unveränderlich sind
Verstehen Sie die Unveränderlichkeit von Strings
Warum Strings unveränderlich sind ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Strings können nicht verändert werden
In Java ist ein String unveränderlich: Nach seiner Erstellung können sich seine Zeichen nie ändern. Jede Methode, die einen String scheinbar verändert, gibt tatsächlich einen vollständig neuen String zurück.
Methoden geben neue Strings zurück
toUpperCase(), replace() und ähnliche Methoden verändern das Original nicht. Sie erzeugen einen neuen String und lassen das Original unverändert.
public class Main {
public static void main(String[] args) {
String original = "hello";
String upper = original.toUpperCase();
System.out.println("original: " + original);
System.out.println("upper: " + upper);
}
}Neuzuweisung ist keine Mutation
Wenn Sie s = s + "!" schreiben, verweist die Variable nun auf einen neuen String. Das alte String-Objekt bleibt unverändert und kann vom Garbage Collector freigegeben werden.
public class Main {
public static void main(String[] args) {
String s = "hi";
String firstRef = s;
s = s + "!";
System.out.println("s: " + s);
System.out.println("firstRef: " + firstRef);
}
}Warum Unveränderlichkeit?
Unveränderlichkeit bietet konkrete Vorteile:
- Thread-Sicherheit: Strings können ohne Sperren gemeinsam verwendet werden
- Caching: Hashcodes und Einträge im String-Pool bleiben gültig
- Sicherheit: Ein an eine Methode übergebener String kann nicht unbemerkt verändert werden
Der String-Pool
Identische String-Literale können sich ein Objekt im String-Pool teilen. Das ist nur sicher, weil sich Strings nie ändern. Hier verweisen zwei Literale auf dasselbe Objekt im Pool.
public class Main {
public static void main(String[] args) {
String a = "java";
String b = "java";
System.out.println(a == b);
System.out.println(a.equals(b));
}
}new String verhindert Pooling
Die Verwendung von new String(...) erzwingt ein separates Objekt. Daher unterscheidet sich die Referenzgleichheit, obwohl die Inhalte übereinstimmen. Vergleichen Sie Inhalte immer mit equals.
public class Main {
public static void main(String[] args) {
String a = "java";
String b = new String("java");
System.out.println("== : " + (a == b));
System.out.println("equals: " + a.equals(b));
}
}Die Kosten der Konkatenation
Jedes + bei Strings erzeugt ein neues Objekt. Wenn Sie dies in einer Schleife tun, werden viele kurzlebige Strings angelegt, was Zeit und Speicher verschwendet.
public class Main {
public static void main(String[] args) {
String result = "";
for (int i = 1; i <= 5; i++) {
result = result + i;
}
System.out.println(result);
}
}Quadratisches Wachstum
Da jede Konkatenation alle bisherigen Zeichen kopiert, skaliert das Erstellen eines langen Strings mit + in einer Schleife schlecht (ungefähr mit O(n zum Quadrat)). Das ist das zentrale Performanceproblem.
public class Main {
public static void main(String[] args) {
String s = "";
for (int i = 0; i < 1000; i++) {
s += "x";
}
System.out.println("Length: " + s.length());
}
}Unveränderliche Werte sind vorhersehbar
Die Übergabe eines Strings an eine Methode ist sicher: Die Methode kann Ihre Kopie nicht verändern. Hier erstellt die Methode einen neuen String, während der Wert des Aufrufers unverändert bleibt.
public class Main {
static void shout(String s) {
s = s + "!!!";
System.out.println("inside: " + s);
}
public static void main(String[] args) {
String msg = "hello";
shout(msg);
System.out.println("outside: " + msg);
}
}Ausblick auf die Lösung
Wenn Sie Strings effizient erstellen müssen, bietet Java StringBuilder, eine veränderliche Begleitklasse. Sie verändert den Inhalt direkt, statt jedes Mal neue Objekte anzulegen.
public class Main {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 5; i++) {
sb.append(i);
}
System.out.println(sb.toString());
}
}Die beiden Ansätze vergleichen
Für einige wenige Konkatenationen ist + völlig in Ordnung und gut lesbar. Für viele Konkatenationen in einer Schleife sollten Sie StringBuilder bevorzugen. Entscheiden Sie anhand des Umfangs der Textverarbeitung.
public class Main {
public static void main(String[] args) {
String simple = "a" + "b" + "c";
StringBuilder sb = new StringBuilder("a");
sb.append("b").append("c");
System.out.println(simple);
System.out.println(sb);
}
}Kurzer Test
Was geschieht tatsächlich, wenn Sie s.toUpperCase() für einen String aufrufen?
Zusammenfassung
Sie haben gelernt, warum Strings unveränderlich sind:
- Der Inhalt eines
Stringändert sich nie - Methoden geben neue Strings zurück
- Unveränderlichkeit ermöglicht Thread-Sicherheit, Pooling und Sicherheit
- Konkatenation mit
+in Schleifen skaliert schlecht StringBuilderist die veränderliche Lösung
Lerne Java mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 104
- Lektionen
- 374
Häufig gestellte Fragen
Ist die Lektion „Warum Strings unveränderlich sind“ kostenlos?
Ja — der vollständige Text von „Warum Strings unveränderlich sind“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Warum Strings unveränderlich sind“?
Verstehen Sie die Unveränderlichkeit von Strings Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Java Academy zu starten?
Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Warum Strings unveränderlich sind“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?
Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Warum Strings unveränderlich sind
- Strings mit StringBuilder erstellen
- StringBuilder-Methoden
- StringBuilder oder StringBuffer