J'ai passé en revue mon code compilé avec la ligne de commande javac et j'ai vu chaque fois que j'ai utilisé la concaténation de chaînes avec opérateur +, le code compilé remplacé par la méthode append() de StringBuilder. maintenant, je pense que l'utilisation de StringBuilder et la concaténation de chaînes ont la même performance, car ils ont un bytecode similaire, est-ce correct?java: String concat dans bytecode converti en StringBuilder
Répondre
Oui, c'est vrai! Mais lorsque vous concaténer en boucle le comportement diffère. par exemple.
String str = "Some string";
for (int i = 0; i < 10; i++) {
str += i;
}
nouveau StringBuilder
sera construit à chaque itération de la boucle unique (avec une valeur initiale de str) et à la fin de chaque itération, il y aura concaténation avec chaîne initiale (en fait StringBuilder
avec la valeur initiale de str
).
Vous devez donc créer StringBuilder par vous-même uniquement lorsque vous utilisez la concaténation de chaînes en boucle.
La principale différence (et la raison pour laquelle le compilateur utilise StringBuilder
pour la concaténation de chaîne) est que String
est immuable, alors que StringBuilder
n'est pas. Par exemple, si vous calculez s1 + s2 + s3
en utilisant des chaînes seules, vous devrez copier les caractères s1
deux fois. Cela peut être (et est) évité en utilisant StringBuilder
.
Cette optimisation est explicitement autorisée par le JLS:
Une mise en œuvre peut choisir d'effectuer la conversion et concaténation en une seule étape pour éviter de créer puis jeter un objet de chaîne intermédiaire. Pour augmenter les performances de la concaténation de chaîne répétée, un compilateur Java peut utiliser la classe StringBuffer ou une technique similaire pour réduire le nombre d'objets String intermédiaires créés par l'évaluation d'une expression.
- 1. Comment un StringBuilder peut-il être mieux converti en String []?
- 2. Concat() en Java
- 3. Programmation en Java bytecode
- 4. ForEach String concat
- 5. MVC Razor String Concat
- 6. erreurs de compilation bytecode
- 7. méthode String append(): StringBuilder vs StringBuffer
- 8. Comment effectuer une recherche dans l'ordre inverse en utilisant String ou StringBuilder en Java?
- 9. StringBuffer/taille StringBuilder en java
- 10. bytecode java incomplet
- 11. Programme Dynamic Array Java converti en C#
- 12. javascript concat string to object
- 13. Concat to string au début
- 14. Java ArrayList converti en
- 15. StringBuilder obtenir erreur en utilisant .append (Java)
- 16. Trace java bytecode stream
- 17. C# string converti au dictionnaire
- 18. Filtrage Sortie StringBuilder - Java
- 19. Java Bytecode DUP
- 20. Compilation Java Bytecode
- 21. Décompilation byfecode java bytecode
- 22. Optimisation du bytecode Java?
- 23. Programmation avec Java Bytecode
- 24. Java bytecode à la classe
- 25. différences entre StringBuilder en Java et C#
- 26. Codeigniter 2.1 - CONCAT MySQL (ajoutez string)
- 27. Utilisez StringBuilder ou String dans le cas suivant?
- 28. Suppression d'instructions du bytecode Java
- 29. Java int array to StringBuilder
- 30. Javascript avec dans stringbuilder