En Java, les instances de la classe String sont immuables (ne peuvent être modifiées). Ainsi, dans les trois lignes de codes suivantes, cinq objets seront créés :
// exemple de concaténation de chaînes avec l'opérateur "+"
String str = "Allo"; // création d'une variable contenant "Allo"
str = str + " toi"; // création d'une variable contenant " toi"
// et d'une autre contenant "Allo toi" (str)
str = str + "!"; // création d'une variable contenant "!"
// et d'une autre contenant "Allo toi!" (str)
On voit bien à quel point il peut être coûteux d'utiliser l'opérateur + si on veut concaténer un grand nombre de chaînes.
En utilisant une instance de StringBuffer, on évite la création massive d'objets. Pour ajouter une chaîne au contenu courant du tampon, il n'y a qu'à appeler la méthode "append". Pour extraire la chaîne résultante, on appelle finalement la méthode "toString".
Exemple :
// exemple de concaténation de chaînes avec un StringBuffer
StringBuffer buff = new StringBuffer("Allo");
buff.append(" toi");
buff.append("!");
// ...
String chaineFinale = buff.toString();
La classe StringBuffer possède plusieurs méthodes intéressantes comme "insert" pour insérer un ou plusieurs caractères à une position donnée et "reverse" pour inverser l'ordre des caractères contenus dans la chaîne.
Voir aussi la classe StringBuilder.