56 votes

Concaténation de chaînes de caractères en Java - quand utiliser +, StringBuilder et concat

Quand faut-il utiliser + pour la concaténation de chaînes de caractères, quand faut-il préférer StringBuilder et quand convient-il d'utiliser concat.

J'ai entendu dire que StringBuilder est préférable pour la concaténation dans les boucles. Pourquoi en est-il ainsi ?

Merci.

2voto

Joachim Sauer Points 133411

Utilisez StringBuilder si vous faites beaucoup de manipulations. Habituellement une boucle est une assez bonne indication de cela.

La raison en est que l'utilisation de la concaténation normale produit beaucoup d'intermédiaires. String qui ne peut pas être facilement "étendu" (c'est-à-dire que chaque opération de concaténation produit un objet de type copie (ce qui nécessite de la mémoire et du temps CPU). A StringBuilder d'autre part, n'a besoin de copier les données que dans certains cas (insertion d'un élément au milieu, ou nécessité de redimensionner parce que le résultat devient trop grand), ce qui lui permet d'économiser sur ces opérations de copie.

Utilisation de concat() ne présente aucun avantage réel par rapport à l'utilisation de + (cela peut être un peu plus rapide pour une simple + mais une fois que vous l'aurez fait a.concat(b).concat(c) il sera en fait plus lent que a + b + c ).

1voto

Rostislav Matl Points 2167

Le gain de performance du compilateur s'applique à concaténation de constantes . Les autres utilisations sont en fait plus lentes que l'utilisation directe de StringBuilder.

Il n'y a pas de problème à utiliser "+", par exemple pour créer un message d'exception, car cela ne se produit pas souvent et l'application est déjà en quelque sorte foutue à ce moment-là. Évitez d'utiliser le "+" dans les boucles.

Pour créer des messages significatifs ou d'autres chaînes paramétrées (expressions Xpath, par exemple) utilisent String.format - il est beaucoup plus lisible.

1voto

Puce Points 13540

Utilisez + pour les déclarations uniques et StringBuilder pour les déclarations/boucles multiples.

1voto

Evgeniy Dorofeev Points 52031

Je suggère d'utiliser concat pour la concaténation de deux chaînes de caractères et StringBuilder sinon, voir mon explication pour opérateur de concaténation (+) vs concat()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X