Puisque les chaînes de Java sont immuables, j'ai toujours utilisé StringBuilder ou StringBuffer pour concaténer des chaînes. Est-ce que la méthode String.format() gère ce problème aussi bien que StringBuilder ou StringBuffer? En d'autres termes, String.format() gère-t-il la mémoire aussi bien que StringBuffer ou StringBuilder?En Java, l'immuabilité des chaînes est-elle prise en compte dans l'implémentation de String.format()?
Répondre
Basé sur le code source de JDK Oracle, il semble que la mise en œuvre crée une nouvelle Formatter
pour chaque appel String#format
qui à son tour alloue un StringBuilder
frais pour chaque appel. Donc oui. Mais comme mentionné dans le commentaire de votre question, il s'agit d'une implémentation spécifique bien que le bon sens implique qu'elle choisirait la manière la plus efficace de faire les choses.
Intéressant, merci! Donc, comme StringBuilder n'est pas thread-safe, je suppose que String.format() n'est pas thread-safe ... au moins l'implémentation d'Oracle? – fooMonster
Si chaque appel au format crée un nouveau StringBuilder et le garde local à la méthode, l'appel au format peut toujours être thread-safe. –
@Michael "Peut encore être thread sûr"? Il semble que vous sous-entendez que le développeur peut le rendre compatible avec les threads en appelant String.format() de manière thread-safe. Clairement. Peut-être que je ne suis pas clair. Le suivi, ainsi que la question d'origine concernait l'implémentation de String.format(). Donc mon suivi serait mieux posé car "Puisque l'implémentation de String.format() dépend de StringBuilder dans l'implémentation d'Oracle, et puisque nous savons que StringBuilder n'est PAS thread-safe, cela signifie-t-il que l'implémentation de String.format() dans Jdk d'Oracle n'est pas non plus thread-safe? " – fooMonster
- 1. équivalent de String.Format() en Java
- 2. UnknownFormatConversionException avec String.format en Java
- 3. String.format() pour mettre en double dans java
- 4. Java: String.Format existe-t-il en Java comme en C#?
- 5. Prise en charge de Rijndael en Java
- 6. échapper caractères de mise en forme dans Java String.format
- 7. Codage des chaînes en HTML en Java
- 8. equivalence string.format dans java
- 9. joindre des chaînes avec un séparateur et prendre en compte les chaînes vides
- 10. Utilisation de Java String.format
- 11. chaîne en Java en utilisant le retour string.format (...)
- 12. Tri des numéros de chaînes en java
- 13. C# String.Format() Équivalent en PHP?
- 14. String.Format en C#
- 15. Comparaisons de chaînes utilisant des expressions LINQ et String.Format
- 16. Tableau de chaînes en Java
- 17. Prise en charge des annonces Java pour les applications Java
- 18. Codes d'erreur avec des descriptions de chaînes variables en Java
- 19. Mise en forme de chaînes dans Java
- 20. iphone: personnaliser la date de prise en compte du calendrier
- 21. analyse de chaînes en Java
- 22. inadéquate compte Lockout en java
- 23. RDFS, Iéna: comment interroger la prise en compte de l'ontologie
- 24. String.Format en Javascript?
- 25. VS Macro/Add-in pour convertir des concaténations de chaînes en style string.format
- 26. initialiser et passer des chaînes en java
- 27. nombre de chaînes en java
- 28. Comparaison de chaînes en Java
- 29. Comment wrapper Java String.format()?
- 30. Comment sauter des chaînes vides avec String.format sur android?
(1) Ceci est spécifique à l'implémentation. (2) Il fonctionne assez bien jusqu'à ce que vous ayez des données qui montrent qu'il ne fonctionne pas assez bien, quelle que soit la façon dont il est implémenté. (3) Comme indiqué en 2, et comme * toujours * avec de telles questions, la seule façon de s'assurer est de profiler. – delnan