# StringBuffer, StringBuilder und StringWriter



## paedubucher (26. Mrz 2008)

Hallo allerseits

Dass es inperformant ist, Strings mit dem Operator '+' zu verketten, wissen wir mittlerweile alle. Doch was ist das richtige Vorgehen?

1. Den StringBuffer verwenden
2. Den StringBuilder verwenden
3. Den StringWriter verwenden
4. concat() auf String aufrufen

Bzw. verstehe ich den Unterscheid der oben genannten Klassen nicht wirklich. StringBuffer und -Builder stellen einen Konstruktor zur Verfügung, der einen String erwartet. Im Unterschied zum StringWriter wird dann die Methode append() zur Erweiterung des Strings verwendet, beim StringWriter verwendet man write().

Nun, wozu drei Klassen, die (soviel ich weiss) das Gleiche tun? Wo liegt der Unterschied? Was sollte man in welchem Fall verwenden? Wie sieht es eigentlich mit concat() aus? Ist das in irgendeiner Weise "besser" als die Verkettung mit dem '+'-Operator?


----------



## SlaterB (26. Mrz 2008)

StringWriter verwendet intern einen StringBuffer,
das ist nur ein Wrapper, der das Interface Writer erfüllt

warum macht StringBuffer das nicht sowieso schon?
gute Frage, aber man muss ja auch nicht unbedingt alle Konzepte zusammenschmeißen,

StringBuilder ist eine modernere Version von StringBuilder, die nicht synchronisiert ist,
der Unterschied ist minimal, 
wenn du 'synchronized' nicht kennst, ist das auch erstmal egal

concat ist minimal performanter als +, wenn man nur zwei und nicht mehr Strings zusammenfügen will und der zweite String länger als 16 Zeichen ist,
aber auch zu vernachlässigende Details


----------



## Verjigorm (26. Mrz 2008)

SlaterB hat gesagt.:
			
		

> StringBuilder ist eine modernere Version von StringBuilder, die nicht synchronisiert ist,



du meinst sicher "...von StringBuffer..."


----------



## paedubucher (26. Mrz 2008)

Arbeite ich nur mit einem Thread, kann ich die Klassen also beliebig verwenden (StringBuilder ist nicht synchronized)?

Beim StringWriter müsste man konsequenter weise wohl via "Writer" (abstrakte Klasse) zugreifen...


----------



## Verjigorm (26. Mrz 2008)

StringBuilder was added in Java 5. It is identical in all respects to StringBuffer except that it is not synchronized, which means that if multiple threads are accessing it at the same time, there could be trouble. For single-threaded programs, the most common case, avoiding the overhead of synchronization makes the StringBuilder very slightly faster.


----------

