Unterschied StringBuilder vs. StringBuffer

Der Unterschied besteht darin, dass StringBuffer synchronisiert und somit Thread-sicher ist und StringBuilder nicht, aber dadurch ein wenig effizienter und schneller.

Inhaltsverzeichnis

Für was werden StringBuffer und StringBuilder verwendet?

Da die Klasse String immutable ist, wird bei jeder Modifikation ein neues Objekt angelegt. StringBuffer und StringBuilder werden im Prinzip wie Strings als Folge von Zeichen (chars) verwendet, mit dem unterschied, dass die Objekte verändert werden können.

Angenommen wir wollen einen String in einer Schleife erweitern. Im Beispiel wird der Einfachheit halber der String 123456789 erstellt (besseres Beispiel hier). Der normale Ansatz wäre ein leerer String als Basis, der in der Schleife erweitert wird:

String s = "";
for (int i = 1; i < 10; i++) {
    s += i;
}
System.out.println(s);
// Ausgabe: 123456789

Das Problem an der Version ist, dass das Programm 9 String Objekte erstellt (instantiiert), die nicht benötigt werden: "", "1", "12", "123", "1234", "12345", "123456", "1234567", "12345678". Mit dem StringBuilder wird nur ein Objekt erstellt, dass in der Schleife erweitert wird:

StringBuilder stringBuilder = new StringBuilder();
for (int i = 1; i < 10; i++) {
    stringBuilder.append(i);
}
System.out.println(stringBuilder);
// Ausgabe: 123456789

In dieser Variante werden nur zwei Objekte erstellt: ein StringBuilder und ein String (beim Aufruf von StringBuilder.toString() in System.out.println())

Intern wird übrigens ein char[] Array verwendet, das die Zeichen enthält. Die initiale Größe dieses Arrays kann man mit dem Konstruktor StringBuilder(int capacity) bestimmen.

Der Unterschied - wann StringBuffer, wann StringBuilder?

StringBuffer muss dann verwendet werden, wenn mehrere Threads gleichzeitig auf das Objekt zugreifen können. Wenn garantiert ist, dass nur ein Thread auf das Objekt zugreift ist StringBuilder die richtige Wahl. Dies ist bei lokalen Variablen z.B. innerhalb einer Methode der Fall.

Ansonsten bieten die Klassen die gleichen Methoden an, das heißt die API ist kompatibel.


Ähnliche Artikel