2011-07-13 9 views
6

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()?

+9

(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

Respuesta

4

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.

+0

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

+1

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. –

+0

@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

Cuestiones relacionadas