String
ne permet pas l'ajout. Chaque méthode vous appeler sur un String
crée un nouvel objet et le renvoie. C'est parce qu' String
est immuable, qui ne peut pas changer son état interne.
D'autre part StringBuilder
est mutable. Lorsque vous appelez append(..)
il modifie l'interne char tableau, plutôt que de créer un nouvel objet de type string.
Il est donc plus efficace d'avoir:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 500; i ++) {
sb.append(i);
}
plutôt que d' str += i
, ce qui permettrait de créer 500 nouveaux objets string.
Notez que dans l'exemple, j'utilise une boucle. Comme helios notes dans les commentaires, le compilateur traduit automatiquement des expressions comme String d = a + b + c
à quelque chose comme
String d = new StringBuilder(a).append(b).append(c).toString();
Notez également qu'il n'y est StringBuffer
de plus de StringBuilder
. La différence est que le premier est synchronisé méthodes. Si vous l'utilisez comme une variable locale, utilisez StringBuilder
. S'il arrive que c'est possible pour qu'il soit accessible par plusieurs threads, utilisez StringBuffer
(c'est rare)