¿StringBuilder.toString conserva la cadena construida?

Estoy creando un StringBuilder para recopilar cadenas que periódicamente descarga a un servidor. Si la descarga falla, quiero mantener las cadenas para intentar de nuevo la próxima vez, aunque en el tiempo podría obtener cadenas adicionales para enviar que debe ser añadido a StringBuilder.

Lo que quiero saber es cuál sería la manera más eficiente de hacer esto, ya que se está haciendo en una aplicación para Android, donde el uso de la batería y, por tanto, el uso de la CPU es una gran preocupación. ¿La función toString () de StringBuilder de llamada almacena la cadena resultante que devuelve internamente para que una llamada posterior no tenga que realizar el trabajo de copiar todas las cadenas originales? O si falla la llamada, ¿debería crear un nuevo StringBuilder inicializado con el valor devuelto de toString ()?

Aquí está el código fuente de OpenJDK para StringBuilder :

 public String toString() { // Create a copy, don't share the array return new String(value, 0, count); } 

El origen del constructor String con esos parámetros es:

 public String(char value[], int offset, int count) { if (offset < 0) { throw new StringIndexOutOfBoundsException(offset); } if (count < 0) { throw new StringIndexOutOfBoundsException(count); } // Note: offset or count might be near -1>>>1. if (offset > value.length - count) { throw new StringIndexOutOfBoundsException(offset + count); } this.offset = 0; this.count = count; this.value = Arrays.copyOfRange(value, offset, offset+count); } 

Así que sí, crea una nueva String cada vez, y sí, hace una copia del char[] cada vez.

Es importante tener en cuenta que esta es una implementación de toString , y otra implementación puede ser obviamente diferente.

Sería un detalle de implementación. Dado que las cadenas de java son inmutables, una impl correcta puede elegir compartir o crear nuevas cadenas de StringBuilder.toString () incluso si no es necesario.

Como todo el mundo dice, puede probar para ver si esto es realmente un problema de rendimiento real para usted. Si se trata de una solución (torpe) es encapsular StringBuilder y almacenar en caché la cadena resultante. Puede utilizar un indicador sucio para indicar que el contenido se ha modificado.

StringBuilder.toString API dice que un nuevo objeto String está asignado e inicializado para contener la secuencia de caracteres representada actualmente por este objeto.

  • ¿Por qué mi aplicación Android dice "No se puede reproducir el vídeo" después de la reproducción?
  • Actividad de Android sin ActionBar
  • Cómo implementar pestañas ahora que TabActivity está obsoleto
  • Pasar un objeto JavaScript usando addJavascriptInterface () en Android
  • Android compartir en Facebook y otras redes sociales
  • Java (Android) WebSocket Client Libraries
  • Cómo resolver este error VFY: no se puede resolver el método virtual
  • Com.google.android.gms.common.internal.safe parcel.safe parcelable no encontrado
  • Invocar una llamada de escucha programáticamente en android
  • El registro de LibGDX no aparece en logcat
  • Cómo crear una aplicación utilizando maven
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.