Les instances de la classe String
sont en Java des objets immuables (qui ne peuvent être modifiés). La conséquence est que chaque affectation, donc chaque concaténation à l'aide de l'opérateur "+", crée un nouvel objet, ce qui gaspille temps CPU et espace mémoire.
La solution est d'utiliser un objet appelé StringBuilder
qui permet de construire et de modifier une chaîne de manière beaucoup plus efficace. On utilise habituellement des méthodes comme append
et insert
et, quand la chaîne est construite, on obtient une instance de String
à l'aide de la méthode toString
.
Voici un exemple :
public class ExempleStringBuilder { public static void main(String[] args) { // on peut démarrer avec un tampon vide // StringBuilder builder = new StringBuilder(); // ou avec un contenu initial StringBuilder builder = new StringBuilder( "Trois anneaux pour les rois Elfes sous le ciel, "); builder.append("Sept pour les Seigneurs Nains dans leurs demeures de pierre, "); builder.append("Neuf pour les Hommes Mortels destinés au trépas, "); builder.append("Un pour le Seigneur Ténébreux sur son sombre trône, "); builder.append("Dans le Pays de Mordor où s'étendent les Ombres. "); builder.append("Un anneau pour les gouverner tous. Un anneau pour les trouver, "); builder.append("Un anneau pour les amener tous et dans les ténèbres les lier, "); builder.append("Au Pays de Mordor où s'étendent les Ombres."); // obtention de la taille effective du tampon int nbCaracteres = builder.length(); // obtention d'une instance de String String poeme = builder.toString(); // ... } }
La classe StringBuffer
est très semblable à StringBuilder
, mais fait le travail un peu moins rapidement. Son avantage est qu'elle est "synchronisée", c'est-à-dire qu'elle peut être manipulée par plus d'un thread à la fois.
Consultez la documentation officielle de Java pour en savoir plus sur le possibilités des objets StringBuilder