345 votes

quand utiliser StringBuilder en java

Il est censé être généralement préférable d'utiliser une StringBuilder pour String concaténation en Java. Est-ce toujours le cas ?

Ce que je veux dire c'est :

Est-ce que les frais de création d'un StringBuilder en appelant l'objet append() et enfin toString() plus petit puis en concaténant les chaînes existantes avec + pour 2 cordes déjà ou est-ce seulement conseillé pour plus de cordes ?

Si un tel seuil existe, de quoi dépend-il (la longueur de la chaîne, je suppose, mais de quelle manière) ?

Et enfin - échangeriez-vous la lisibilité et la concision de la + concaténation pour les performances de l StringBuilder dans des cas plus petits comme 2, 3, 4 cordes ?

EDIT L'utilisation explicite de StringBuilder pour les concaténations régulières est mentionnée comme obsolète à l'adresse suivante conseils d'optimisation java obsolètes ainsi qu'à mythes urbains du java .

485voto

Ralph Points 42744

Si vous utilisez la concaténation de chaînes dans une boucle (quelque chose comme :

String s = "";
for(int i = 0; i < 100; i++) {
  s += ", " + i;
}

alors vous devez utiliser un StringBuilder (pas StringBuffer ) au lieu d'une chaîne, car il est beaucoup plus rapide et consomme moins de mémoire.

Si vous avez une seule déclaration :

String s = "1, " + "2, " + "3, " + "4, " ....;

alors vous pouvez utiliser String s, car le compilateur utilisera StringBuilder automatiquement.

51voto

zawhtut Points 3423

La réponse de Ralph est fabuleuse. Je préférerais utiliser la classe StringBuilder pour construire/décorer la chaîne de caractères car son utilisation ressemble davantage au modèle Builder.

public String decorateTheString(String orgStr){
            StringBuilder builder = new StringBuilder();
            builder.append(orgStr);
            builder.deleteCharAt(orgStr.length()-1);
            builder.insert(0,builder.hashCode());
            return builder.toString();
}

Il peut être utilisé comme une aide/constructeur pour construire la chaîne, pas la chaîne elle-même.

38voto

Riaan Cornelius Points 1049

En règle générale, utilisez toujours le code le plus lisible et ne procédez à une refonte que si les performances sont un problème. Dans ce cas précis, la plupart des JDK récents optimiseront le code en version StringBuilder dans tous les cas.

En général, vous n'avez vraiment besoin de le faire manuellement que si vous effectuez la concaténation de chaînes de caractères dans une boucle ou dans un code complexe que le compilateur ne peut pas facilement optimiser.

7voto

Michał Niklas Points 15907

Jetez un coup d'œil : http://www.javaspecialists.eu/archive/Issue068.html y http://www.javaspecialists.eu/archive/Issue105.html

Effectuez les mêmes tests dans votre environnement et vérifiez si un JDK plus récent ou votre implémentation de Java effectue mieux certaines opérations sur les chaînes de caractères avec String StringBuilder .

5voto

William Morrison Points 6578

Certains compilateurs peuvent ne pas remplacer les concaténations de chaînes par des équivalents StringBuilder. Assurez-vous de prendre en compte les compilateurs que votre source utilisera avant de vous fier aux optimisations au moment de la compilation.

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