Les classes StringBuffer et StringBuilder
Le caractère immuable de la classe String peut poser problème lors de nombreux traitements
sur des objets de cette classe. En effet lors d’une modification successive d’un objet String,
exemple :
String s = "";
for (int i = 0; i < tab.length; i++){
s += tab[i] + ", ";
}
On crée en réalité différents objets String qui viennent remplacer le premier. Le temps
d’exécution pour la création est peut prendre bien plus de temps que la modification d’un
élément. C’est pourquoi il existe les classes StringBuffer et StringBuilder, qui représentent
également une chaine de caractères mais les objets de type StringBuffer et StringBuilder sont
mutables (la différence entre StringBuffer et StringBuilder vient du fait que toutes les
méthodes de StringBuffer sont synchronisées, adapté aux programmes multithreads,
contrairement aux méthodes de StringBuilder, plus rapide dans le cas de programme avec un
seul thread).
La manière de concaténer avec la classe String varie également :
StringBuilder bui = new StringBuilder();
bui.append ("Hell");
bui.append (" World ");
bui.append ('!');
bui.insert (4, 'o'); //Insert le "o" à
la position 4
bui.deleteCharAt(1); //Supprime le "e" à
l'indice 1
System.out.println (bui);
// Affiche "Hllo World !"
String str = new String();
str = "Hell";
str += " World ";
str += '!';
//Obligation de concaténer en
fin de chaine, il faut se servir
de substring (dispo également
dans StringBuilder)
System.out.println (str);
// Affiche "Hell World !"