Java StringBuilder vs String: Wann nutzen?
Lernen Sie den Unterschied zwischen String und StringBuilder in Java kennen. Effizient programmieren für Azubis, Studenten und Berufseinsteiger.
By Marcel Schmidtpeter 30 Jul 2026
Du sitzt vor deiner ersten echten Programmieraufgabe. In einer Schleife sollen Hunderte Namen zu einem einzigen Text zusammengefügt werden. Du schreibst `text = text + name` und alles funktioniert - bis dein Ausbilder oder Dozent sagt: "Nimm doch mal den Java StringBuilder." Warum? Das lässt sich in einem Satz erklären.
Was ist der Java StringBuilder?
Der StringBuilder ist eine Java-Klasse, die Text veränderbar (mutable) hält. Im Gegensatz zu einem normalen `String`, dessen Inhalt nach der Erstellung unveränderlich (immutable) ist, kannst du einen StringBuilder-Text direkt im Speicher verändern - ohne dass jedes Mal ein neues Objekt entsteht.
Stell dir vor, du schreibst einen Brief auf Papier. Jedes Mal, wenn du etwas hinzufügen willst, musst du den ganzen Brief neu abschreiben. Das ist ein normaler `String`. Ein `StringBuilder` ist wie ein Dokument in einem Texteditor: Du fügst einfach hinten etwas an, und fertig.
Technisch gesehen arbeitet der StringBuilder mit einem internen Puffer (einem Array von Zeichen), der dynamisch wächst. Das spart Ressourcen, da der Speicherplatz nicht ständig neu alloziert werden muss.
Warum sind Strings in Java unveränderlich?
Ein String in Java ist ein Objekt, das nach der Erstellung nicht mehr verändert werden kann. Sobald du mit `+` etwas anfügst, erzeugt Java im Hintergrund ein komplett neues String-Objekt und das alte wird vom Garbage Collector (Java's automatische Speicherbereinigung) entsorgt.
Das hat einen guten Grund: Weil Strings unveränderlich sind, kann Java sie sicher teilen. Das passiert im sogenannten "String Pool". Wenn du `String s1 = "Hallo";` und `String s2 = "Hallo";` schreibst, nutzen beide Variablen exakt dasselbe Objekt im Speicher. Das spart massiv Speicher.
Zudem macht es Strings threadsafe, also sicher für gleichzeitige Zugriffe aus verschiedenen Programmteilen. Für dich im Alltag bedeutet das: Ein einzelner String-Vergleich oder eine einfache Zuweisung ist völlig unproblematisch. Erst bei vielen Operationen in Folge wird es langsam.
Wichtig: Die Unveränderlichkeit von Strings ist ein zentrales Design-Feature von Java, um Speicher zu sparen und Programmfehler zu vermeiden. Mehr zur String-Klasse findest du in den Oracle Java Docs für String.
Wann nutzt man StringBuilder statt String?
Nutze den Java StringBuilder immer dann, wenn du in einer Schleife oder einer Methode mit vielen Aufrufen Text zusammenfügst. Ab etwa fünf bis zehn Konkatenierungen (Verkettungen) lohnt sich der StringBuilder messbar.
Für einfache Zuweisungen wie `String name = "Max" + " " + "Mustermann"` bleibt der Compiler schlau und optimiert das selbst. Da musst du nicht eingreifen.
Kriterium | String | StringBuilder |
Veränderbarkeit | unveränderlich (immutable) | veränderbar (mutable) |
Threadsicherheit | ja | nein |
Geeignet für | wenige, feste Texte | viele, dynamische Textänderungen |
Speicherverbrauch bei Schleifen | hoch (viele Objekte) | niedrig (ein Objekt) |
Geschwindigkeit bei einfachem Text | gut | gut |
Geschwindigkeit bei Schleifen | schlecht | gut |
Merke: Für alles unter fünf Verkettungen ist ein normaler String völlig ausreichend. Ab zehn Verkettungen, besonders in Schleifen, solltest du unbedingt StringBuilder nutzen.
Wie funktioniert StringBuilder in der Praxis?
Hier ein typisches Beispiel: Du hast eine Liste von Namen und willst sie als kommagetrennten Text ausgeben.
Mit normalem String (ineffizient)
public class StringExample {
public static void main(String[] args) {
String[] names = { "Anna", "Ben", "Clara", "David", "Eva" };
String result = "";
for (String name : names) {
result = result + name + ", ";
// A new String object is created in every iteration
}
System.out.println(result);
}
}Bei fünf Namen ist das kein Problem. Bei 10.000 Namen erzeugt diese Schleife über 10.000 String-Objekte, die alle im Speicher landen und wieder entsorgt werden müssen. Das bremst dein Programm massiv aus.
Mit StringBuilder (effizient)
public class StringBuilderExample {
public static void main(String[] args) {
String[] names = { "Anna", "Ben", "Clara", "David", "Eva" };
StringBuilder sb = new StringBuilder();
for (String name : names) {
sb.append(name).append(", ");
// One single object is reused
}
String result = sb.toString();
System.out.println(result);
}
}Die Methode `append()` fügt Text direkt ans Ende des bestehenden Inhalts an. Hier siehst du auch ein cooles Feature namens "Method Chaining": Da `append()` wieder den StringBuilder selbst zurückgibt, kannst du mehrere Befehle direkt aneinanderreihen (`sb.append(a).append(b)`). Am Ende wandelst du mit `toString()` den StringBuilder zurück in einen normalen String.
Merke: `append()` ist die meistgenutzte StringBuilder-Methode. Es gibt sie für Strings, Zahlen, Zeichen und sogar andere Objekte.
Welche Methoden bietet der StringBuilder?
Neben dem Anhängen gibt es weitere nützliche Operationen, um den Text zu manipulieren.
Methode | Beschreibung | Beispiel |
`append(x)` | Hängt etwas an das Ende an | `sb.append("Hallo")` |
`insert(index, x)` | Fügt an einer bestimmten Position ein | `sb.insert(0, "Start: ")` |
`delete(start, end)` | Löscht einen Zeichenbereich | `sb.delete(0, 5)` |
`reverse()` | Dreht den gesamten Text um | `sb.reverse()` |
`toString()` | Wandelt den Inhalt in einen String um | `sb.toString()` |
`length()` | Gibt die aktuelle Länge zurück | `sb.length()` |
Pro-Tipp: Wenn du ungefähr weißt, wie lang dein Text am Ende wird, kannst du beim Konstruktor already die Kapazität angeben: `new StringBuilder(100)`. Das verhindert, dass der interne Puffer im Hintergrund ständig vergrößert werden muss, was nochmal Performance bringt.
Die offizielle Dokumentation aller Methoden findest du in den Oracle Java Docs für StringBuilder.
Was ist der Unterschied zwischen StringBuilder und StringBuffer?
Es gibt noch eine Schwesterklasse: StringBuffer. Sie macht genau dasselbe wie StringBuilder, ist aber threadsafe. Das heißt, mehrere Threads können gleichzeitig darauf zugreifen, ohne dass es zu Konflikten kommt.
Warum nutzt man nicht einfach immer StringBuffer? Weil diese Threadsicherheit Performance kostet. Synchronisation verlangsamt den Zugriff. In den meisten Fällen - gerade als Einsteiger in Ausbildung, Studium oder Beruf - arbeitest du nicht mit mehreren Threads gleichzeitig. Da ist der StringBuilder die bessere Wahl.
Merke: Nimm StringBuilder für normale Programme. StringBuffer nur, wenn du explizit mit Multithreading arbeitest.
Welche Fehler beim StringBuilder sollte ich vermeiden?
Fehler 1: StringBuilder für alles nutzen
Manche Azubis und Studenten denken: "StringBuilder ist schneller, also nutze ich es immer." Das ist Overengineering (übertriebene Optimierung). Für einfache Zuweisungen wie `String errorMessage = "Error in line " + lineNumber` ist ein normaler String lesbarer und völlig ausreichend.
Der Java-Compiler optimiert einfache Verkettungen ohnehin automatisch. Du sparst nichts, machst den Code aber unnötig kompliziert.
Fehler 2: StringBuilder ineffizient neu zuweisen
Ein Klassiker, der den Zweck ad absurdum führt:
// Wrong
StringBuilder sb = new StringBuilder("Hello");
sb = new StringBuilder(sb.toString() + " World");
// This creates a new object - the advantage is gone// Right
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
// One object, one changeFehler 3: StringBuilder in Threads teilen
StringBuilder ist nicht threadsafe. Wenn zwei Threads gleichzeitig `append()` aufrufen, kann der Text kaputtgehen oder Daten gehen verloren. In dem Fall musst du StringBuffer verwenden oder die Zugriffe synchronisieren. Das gilt allerdings nicht, wenn du in einer Single-Thread-Anwendung arbeitest - und das sind die meisten Projekte in Ausbildung und Studium.
Wie kann ich den Unterschied in der Performance selbst testen?
Schreibe ein kleines Programm, das die Zeit misst. Erzeuge einen Text mit 100.000 Buchstaben - einmal mit String-Verkettung und einmal mit StringBuilder. So siehst du den Unterschied selbst:
public class PerformanceTest {
public static void main(String[] args) {
int iterations = 100000;
// Test with String
long startTimeString = System.currentTimeMillis();
String text = "";
for (int i = 0; i < iterations; i++) {
text = text + "a";
}
long endTimeString = System.currentTimeMillis();
System.out.println("String: " + (endTimeString - startTimeString) + " ms");
// Test with StringBuilder
long startTimeBuilder = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < iterations; i++) {
sb.append("a");
}
long endTimeBuilder = System.currentTimeMillis();
System.out.println("StringBuilder: " + (endTimeBuilder - startTimeBuilder) + " ms");
}
}Auf einem modernen Rechner liefert das oft Unterschiede im Sekundenbereich (z.B. 3000 ms vs. 5 ms). Der Unterschied ist massiv. Probier es selbst aus - das Verständnis bleibt hängen, wenn du den Effekt einmal gesehen hast.
Wenn du mehr über die grundlegenden Datentypen in Java lernen willst, schau dir unseren Beitrag zu Java Variablen & Datentypen an. Eine gute Übersicht zu String-Operationen findest du auch bei W3Schools Java Strings.
FAQ
Wann sollte ich StringBuilder statt String verwenden?
Nutze den Java StringBuilder ab etwa fünf bis zehn Verkettungen, besonders in Schleifen oder Methoden, die oft aufgerufen werden. Bei einfachen, festen Texten bleibt ein normaler String die bessere Wahl.
Ist StringBuilder schneller als String?
In Schleifen ja, deutlich. Bei einfachen Zuweisungen macht der Java-Compiler die Optimierung automatisch, und String ist genauso schnell.
Was ist der Unterschied zwischen StringBuilder und StringBuffer?
StringBuilder ist nicht threadsafe und schneller. StringBuffer ist threadsafe und langsamer. Für die meisten Anwendungen nimmst du StringBuilder.
Was bedeutet "immutable" bei Strings?
Immutable bedeutet unveränderlich. Ein String-Objekt kann nach der Erstellung nicht mehr geändert werden. Jede Veränderung erzeugt ein neues Objekt.
Kann ich StringBuilder mit anderen Datentypen nutzen?
Ja. Die Methode `append()` akzeptiert `int`, `double`, `boolean`, `char` und sogar Objekte. Java wandelt alles automatisch in Text um.
Fazit
Der Java StringBuilder ist kein Ersatz für den normalen String, sondern ein Werkzeug für einen bestimmten Zweck: viele Textänderungen in kurzem Abstand. In deiner IHK-Abschlussprüfung, in Uni-Klausuren oder im ersten Job fallen Fragen dazu fast immer auf Performance-Optimierung in Schleifen ab.
Wenn du dich gerade auf Prüfungen vorbereitest oder beim Programmieren feststeckst, kann dir individuelle Nachhilfe helfen. Bei study-it.education bekommst du gezielte Unterstützung - egal ob Azubi, Student oder Berufseinsteiger.
Need someone to walk through this with you?
Instead of re-reading: 30 min with a senior dev.
Book a free first chat →
Lernen Sie den Unterschied zwischen String und StringBuilder in Java kennen. Effizient programmieren für Azubis, Studenten und Berufseinsteiger.
marcel.schmidtpeter@study-it.education →More reading
Java innere Klassen: Wann und warum? Einfach erklärt
Innere Klassen strukturieren Java-Code sauberer. Dieser Guide erklärt Azubis, Studenten und Einsteigern, wann und warum man sie einsetzt.
Java Main Methode: public static void main einfach erklärt
Einfache Erklärung der Java Main Methode für Azubis, Studenten und Berufseinsteiger. Verstehen Sie public static void main Schritt für Schritt.
Java Pakete Import einfach erklärt: So organisierst du Code
Java Pakete und Imports einfach erklärt für Azubis, Studenten und Berufseinsteiger. Ordnung im Java-Code.