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
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
A voir également:
- String et string buffer en java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Java bible - Forum Téléchargement
- Uma frame buffer size ✓ - Forum Matériel & Système
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
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.
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.