0Pricing
Java Academy · Lektion

StringBuilder oder StringBuffer

Abwägungen bei der Thread-Sicherheit

StringBuilder oder StringBuffer ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.

Zwei veränderliche Klassen

Java verfügt über zwei veränderliche String-Klassen: StringBuilder und StringBuffer. Ihre APIs sind nahezu identisch, unterscheiden sich aber in einem entscheidenden Punkt: der Thread-Sicherheit.

Dieselbe API

Beide Klassen bieten append, insert, delete, reverse und die übrigen Methoden. Code, der eine Klasse verwendet, kann meist durch Ändern des Typnamens auf die andere umgestellt werden.

public class Main {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("Hello").append(", ").append("World");
        System.out.println(sb);
    }
}

StringBuffer ist synchronisiert

Die Methoden von StringBuffer sind synchronisiert. Das bedeutet, dass mehrere Threads dieselbe Instanz sicher verändern können. Diese Sicherheit verursacht geringe Performancekosten.

public class Main {
    public static void main(String[] args) {
        StringBuffer buffer = new StringBuffer("thread-safe");
        buffer.append("!");
        System.out.println(buffer);
    }
}

StringBuilder ist nicht synchronisiert

StringBuilder verzichtet auf Synchronisierung und ist dadurch schneller. Der Nachteil ist, dass es nicht sicher ist, eine Instanz ohne externe Koordination zwischen Threads gemeinsam zu verwenden.

public class Main {
    public static void main(String[] args) {
        StringBuilder builder = new StringBuilder("fast");
        builder.append("!");
        System.out.println(builder);
    }
}

Wann Sie StringBuilder verwenden sollten

Verwenden Sie StringBuilder im üblichen Fall: beim Erstellen von Strings innerhalb einer einzelnen Methode oder eines einzelnen Threads. Für fast allen alltäglichen Code ist dies die Standardwahl.

public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 5; i++) {
            sb.append("#");
        }
        System.out.println(sb);
    }
}

Wann Sie StringBuffer verwenden sollten

Greifen Sie nur dann zu StringBuffer, wenn dieselbe Builder-Instanz tatsächlich von mehreren Threads gemeinsam verwendet und verändert wird. In der Praxis ist das selten.

public class Main {
    public static void main(String[] args) {
        StringBuffer shared = new StringBuffer("log: ");
        shared.append("event A; ");
        shared.append("event B");
        System.out.println(shared);
    }
}

Lokale Variablen werden nicht gemeinsam verwendet

Ein Builder, der nur innerhalb einer Methode deklariert und verwendet wird, ist für andere Threads niemals sichtbar. Daher ist StringBuilder dort immer die richtige Wahl. Die fehlende Synchronisierung kann kein Problem verursachen.

public class Main {
    static String build() {
        StringBuilder sb = new StringBuilder();
        sb.append("local only");
        return sb.toString();
    }
    public static void main(String[] args) {
        System.out.println(build());
    }
}

Leistungsunterschied

Der Synchronisierungs-Overhead von StringBuffer macht ihn bei der Verwendung in einem einzelnen Thread langsamer. Für Schleifen mit vielen Durchläufen bietet StringBuilder die bessere Leistung.

public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 100000; i++) {
            sb.append('x');
        }
        System.out.println("Built length: " + sb.length());
    }
}

Historischer Hinweis

StringBuffer gab es zuerst, bereits in den frühen Java-Versionen. StringBuilder wurde in Java 5 als nicht synchronisierte und schnellere Alternative für den häufigen Fall der Verwendung in einem einzelnen Thread hinzugefügt.

Die richtige Wahl treffen

Verwenden Sie standardmäßig StringBuilder. Wechseln Sie nur dann zu StringBuffer, wenn Sie nachweisen können, dass eine einzelne Instanz von mehreren Threads gemeinsam verwendet wird. Andernfalls zahlen Sie für eine Sicherheit, die Sie nicht benötigen.

public class Main {
    public static void main(String[] args) {
        StringBuilder result = new StringBuilder();
        result.append("Use StringBuilder ").append("by default");
        System.out.println(result);
    }
}

Beide werden zu String

Beide Klassen erzeugen über toString() einen unveränderlichen String. Die Wahl zwischen ihnen wirkt sich nur auf das Erstellen und nicht auf das Endergebnis aus.

public class Main {
    public static void main(String[] args) {
        String a = new StringBuilder("one").toString();
        String b = new StringBuffer("two").toString();
        System.out.println(a + " " + b);
    }
}

Kurze Überprüfung

Was ist der wichtigste Unterschied zwischen StringBuilder und StringBuffer?

Zusammenfassung

Sie haben die Vor- und Nachteile kennengelernt:

  • Beide verfügen über nahezu identische APIs
  • StringBuffer ist synchronisiert (threadsicher, aber langsamer)
  • StringBuilder ist nicht synchronisiert (schneller)
  • Verwenden Sie zum Erstellen von Zeichenfolgen in einem einzelnen Thread standardmäßig StringBuilder
  • Verwenden Sie StringBuffer nur für Instanzen, die tatsächlich gemeinsam verwendet werden

Häufig gestellte Fragen

Ist die Lektion „StringBuilder oder StringBuffer“ kostenlos?

Ja — der vollständige Text von „StringBuilder oder StringBuffer“ 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 „StringBuilder oder StringBuffer“?

Abwägungen bei der Thread-Sicherheit 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 4 von 4.

Wie lange dauert die Lektion „StringBuilder oder StringBuffer“?

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