Dado que las cadenas en Java son inmutables, siempre he usado StringBuilder o StringBuffer para concatenar cadenas. ¿El método String.format() maneja este problema, así como StringBuilder o StringBuffer? En otras palabras, ¿String.format() administra la memoria, así como StringBuffer o StringBuilder?En Java, ¿se considera la inmutabilidad de Strings en la implementación de String.format()?
Respuesta
Basado en el código fuente del JDK de Oracle, parece que la aplicación crea una nueva Formatter
para cada llamada String#format
que a su vez asigna un nuevo StringBuilder
para cada llamada. Entonces sí. Pero como se menciona en el comentario a su pregunta, esta es una implementación específica, aunque el sentido común implica que elegiría la forma más eficiente de hacer las cosas.
Interesante, gracias! Entonces, como seguimiento, dado que StringBuilder no es seguro para subprocesos, supongo que String.format() tampoco es seguro para subprocesos ... ¿al menos la implementación de Oracle? – fooMonster
Si cada llamada al formato crea un nuevo StringBuilder y lo mantiene local para el método, entonces la llamada al formato aún puede ser segura para subprocesos. –
@Michael "¿Aún puede ser seguro para subprocesos?" Parece que está implicando que el desarrollador puede hacerlo seguro para hilos llamando a String.format() de una manera segura para subprocesos. Claramente. Tal vez no estoy siendo claro. El seguimiento, así como la pregunta original fue sobre la implementación de String.format(). Así que mi seguimiento sería mejor planteado como "Dado que la implementación de String.format() depende de StringBuilder en la implementación de Oracle, y ya que sabemos que StringBuilder NO es seguro para subprocesos, ¿eso significa que la implementación de String.format() en jdk de oráculo tampoco es seguro para subprocesos? " – fooMonster
- 1. Poner doc-strings en data vars, ¿se considera idiomático?
- 2. ¿Cuándo se interrumpe Java Strings?
- 3. La verdadera definición de inmutabilidad?
- 4. RESTful Strings matcher en Java
- 5. Caracteres invisibles en Java Strings
- 6. Implementación de la interfaz Java en MATLAB
- 7. escapando caracteres de formato en java String.format
- 8. ¿La sobrecarga de métodos se considera polimorfismo?
- 9. ¿Qué significa "% 1 $ #" cuando se usa en String.format (Java)?
- 10. La superación de las "desventajas" de la inmutabilidad de cadena
- 11. Java Strings: compareTo() vs equals()
- 12. String.format() y números hexadecimales en Java
- 13. Cómo ajustar Java String.format()?
- 14. Inmutabilidad de cadena
- 15. ¿En qué se diferencia la implementación de LinkedHashMap de HashMap?
- 16. String.Format para la moneda en un TextBoxFor
- 17. Implementación de la compresión en memoria para objetos en Java
- 18. Java: ¿String.Format existe en Java como en C#?
- 19. Implementación de la segmentación de cuencas hidrográficas en Java
- 20. String.format() para formatear el doble en Java
- 21. ¿Por qué esta matriz de Java se considera bidimensional?
- 22. ¿Por qué la co-varianza de array se considera tan horrible?
- 23. ¿Es la inmutabilidad útil en aplicaciones no paralelas?
- 24. Inmutabilidad de cadena en CPython violado
- 25. Java String.Format con el símbolo de moneda
- 26. formas de escapar {en la función string.format en vb
- 27. Implementación de concurrencia en la aplicación web Java EE
- 28. Implementación de PCA en Java
- 29. Implementación de KDTree en Java
- 30. La implementación toString en las enumeraciones de Java
(1) Esto es específico de la implementación. (2) Funciona lo suficientemente bien hasta que tenga datos que demuestren que no funciona lo suficientemente bien, independientemente de cómo se implemente. (3) Como se insinuó en 2, y como * siempre * con tales preguntas, la única manera de asegurarse es haciendo un perfil. – delnan