Je n'allais pas répondre à cette question, mais il y a deux réponses ici (qui ont été votées!) Qui sont carrément fausses. Tenez compte de ces expressions:
String a = "a" + "b" + "c";
String b = System.getProperty("blah") + "b";
La première est évaluée à compilation. La deuxième est évaluée à l'exécution.
Donc jamais remplacez concaténations constantes (de tout type) avec StringBuilder, StringBuffer ou similaire. Utilisez uniquement celles où les variables sont invovées et généralement uniquement lorsque vous ajoutez beaucoup d'opérandes ou que vous ajoutez une boucle.
Si les caractères sont constants, cela est bien:
String s = "" + 'a' + 'b' + 'c';
Si toutefois ils ne sont pas, considérez ceci:
String concat(char... chars) {
if (chars.length == 0) {
return "";
}
StringBuilder s = new StringBuilder(chars.length);
for (char c : chars) {
s.append(c);
}
return s.toString();
}
comme une solution appropriée.
Cependant certains pourraient être tentés d'optimiser:
String s = "Name: '" + name + "'"; // String name;
dans ce:
String s = new StringBuilder().append("Name: ").append(name).append("'").toString();
Bien que ce soit bien intentionné, la ligne de fond est NE PAS.
Pourquoi? Comme une autre réponse a correctement souligné: le compilateur fait cela pour vous. Donc en le faisant vous-même, vous n'autorisez pas le compilateur à optimiser le code ou pas en fonction de sa bonne idée, le code est plus difficile à lire et est inutilement compliqué.
Pour une optimisation de bas niveau, le compilateur est meilleur que vous pour optimiser le code.
Laissez le compilateur faire son travail. Dans ce cas, le pire des cas est que le compilateur change implicitement votre code pour exactement ce que vous avez écrit. La concaténation de 2-3 Strings peut s'avérer plus efficace que la construction d'un StringBuilder, il est donc préférable de le laisser tel quel. Le compilateur sait ce qu'il y a de mieux à cet égard.
il vous manque un toString() à la fin de la première ligne de code. – akuhn
Vous avez tort. "a" + "b" + "c" devient "abc" à la compilation. Son seulement évalué à l'exécution si au moins un de ces opérandes ne peut pas être déterminé au moment de la compilation. – cletus
@Adrian merci - fixe – Dustin