En supposant que les cordes a et b :
a += b
a = a.concat(b)
Sous le capot, est-ce que c'est la même chose ?
Voici concat décompilé comme référence. J'aimerais pouvoir décompiler l'opérateur +
également pour voir ce qu'il fait.
public String concat(String s) {
int i = s.length();
if (i == 0) {
return this;
}
else {
char ac[] = new char[count + i];
getChars(0, count, ac, 0);
s.getChars(0, i, ac, count);
return new String(0, count + i, ac);
}
}
Niyaz a raison, mais il convient également de noter que l'opérateur spécial + peut être converti en quelque chose de plus efficace par le compilateur Java. Java dispose d'une classe StringBuilder qui représente une chaîne de caractères mutable et non protégée contre les threads. Lorsqu'il effectue un grand nombre de concaténations de chaînes, le compilateur Java convertit silencieusement l'opérateur + en un opérateur plus efficace.
String a = b + c + d;
en
String a = new StringBuilder(b).append(c).append(d).toString();
ce qui, pour les grandes chaînes de caractères, est nettement plus efficace. Pour autant que je sache, cela ne se produit pas lorsque vous utilisez la méthode concat.
Toutefois, la méthode concat est plus efficace lorsqu'il s'agit de concaténer une chaîne vide sur une chaîne existante. Dans ce cas, la JVM n'a pas besoin de créer un nouvel objet String et peut simplement retourner l'objet existant. Consultez la documentation de concat pour confirmer cela.
Donc, si vous êtes très soucieux de l'efficacité, vous devez utiliser la méthode concat pour concaténer des chaînes de caractères éventuellement vides, et utiliser + dans les autres cas. Toutefois, la différence de performances devrait être négligeable et vous ne devriez probablement jamais vous en préoccuper.
L'opérateur + peut fonctionner entre une chaîne et une valeur de type chaîne, char, entier, double ou flottant. Il convertit simplement la valeur en sa représentation en chaîne de caractères avant la concaténation.
L'opérateur concat ne peut être utilisé que sur et avec des chaînes de caractères. Il vérifie la compatibilité des types de données et génère une erreur s'ils ne correspondent pas.
À part cela, le code que vous avez fourni fait la même chose.
Je ne pense pas.
a.concat(b)est implémenté dans String et je pense que l'implémentation n'a pas beaucoup changé depuis les premières machines Java. L'implémentation de l'opération
+dépend de la version de Java et du compilateur. Actuellement,
+est implémenté en utilisant [
StringBuffer][1] pour rendre l'opération aussi rapide que possible. Peut-être que dans le futur, cela changera. Dans les versions précédentes de Java, l'opération
+` sur les chaînes de caractères était beaucoup plus lente car elle produisait des résultats intermédiaires.
Je suppose que +=
est implémenté en utilisant +
et est optimisé de la même manière.
[1] : https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html