String et string buffer en java

Résolu/Fermé
Lionel - 30 janv. 2002 à 17:37
Duch Messages postés 27 Date d'inscription lundi 23 octobre 2000 Statut Membre Dernière intervention 18 décembre 2002 - 30 janv. 2002 à 18:26
Salut à tous,

Je n'arrive pas à comprendre la différence entre string et stringbuffer, selon l'aide une string instanciée ne pourrait plus etre modifiée alors que les stringbuffer peuvent etre manipulées. Je ne comprend rien car quand j'affecte une valeur à une chaîne string dans un programme, je peux à tout moment lui en affecter une autre ou manipuler la sus dite string. Il me semble que j'arrive à faire les mêmes choses avec des strings ou des stringbuffer, je ne comprend pas !

Qqn a t'il compris la difference qu'il y a vraiment ? Peut on me l'expliquer ?

Merci
A voir également:

1 réponse

Duch Messages postés 27 Date d'inscription lundi 23 octobre 2000 Statut Membre Dernière intervention 18 décembre 2002 61
30 janv. 2002 à 18:26
En fait les String sont effectivement non modifiables. Cela signifie que :
String s1 = "toto";
s1 = s1 + "encore toto";
instancie une chaine s1 avec toto, puis une autre chaine qui est la concaténation de s1 et de "encore toto". Cette derniere chaine etant ensuite affectee a s1. Donc si on fait beaucoup de conatenation, on instancie beaucoup de chaines et ca prend du temps.
D'ou le StringBuffer qui lui est modifiable (on peut ajouter des caractères à un StringBuffer existant sans en recréer un autre).
Dans ce cas :
StringBuffer sb = "toto";
sb.append("encore toto");
String s1=sb.toString();
produira le même résultat que précédemment mais diminuera le nombre d'instanciations. Ce qui est d'autant plus vrai que l'on effectue beaucoup de concatenations.

Ensuite, un des interets des String est que si on a :
String s = "toto";
String s2 = s;
et plus loin
s = "toto2";
on est sûr que s2 garde la valeur "toto" puisque s1 référence une toute nouvelle chaine. Cela signifie que lorsque l'on fait des copies d'objets (par exemple), les chaines n'ont pas besoin d'etre recopiées en profondeur. Une affectation suffit.
64