Java Academy · Lektion

Warum Strings unveränderlich sind

Verstehen Sie die Unveränderlichkeit von Strings

Lektion 1 von 413 Schritte

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
  • StringBuilder ist die veränderliche Lösung
Kostenlos starten

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

  1. Warum Strings unveränderlich sind
  2. Strings mit StringBuilder erstellen
  3. StringBuilder-Methoden
  4. StringBuilder oder StringBuffer
← Zurück zu Java Academy