Diferencia entre StringBuilder y StringBuffer

Resuelto blacktiger asked hace 15 años • 33 respuestas

¿ Cuál es la principal diferencia entre StringBuffery StringBuilder? ¿Hay algún problema de rendimiento al decidirse por alguno de estos?

blacktiger avatar Dec 10 '08 11:12 blacktiger
Aceptado

StringBufferestá sincronizado, StringBuilderno lo está.

sblundy avatar Dec 10 '2008 04:12 sblundy

StringBuilderes más rápido que StringBufferporque no lo es synchronized.

Aquí hay una prueba de referencia simple:

public class Main {
    public static void main(String[] args) {
        int N = 77777777;
        long t;

        {
            StringBuffer sb = new StringBuffer();
            t = System.currentTimeMillis();
            for (int i = N; i --> 0 ;) {
                sb.append("");
            }
            System.out.println(System.currentTimeMillis() - t);
        }

        {
            StringBuilder sb = new StringBuilder();
            t = System.currentTimeMillis();
            for (int i = N; i > 0 ; i--) {
                sb.append("");
            }
            System.out.println(System.currentTimeMillis() - t);
        }
    }
}

Una ejecución de prueba proporciona los números de 2241 msfor StringBuffervs 753 msfor StringBuilder.

polygenelubricants avatar May 05 '2010 09:05 polygenelubricants

Básicamente, StringBufferlos métodos están sincronizados mientras StringBuilderque no.

Las operaciones son "casi" las mismas, pero usar métodos sincronizados en un solo hilo es excesivo.

Eso es todo.

Cita de la API StringBuilder :

Esta clase [StringBuilder] proporciona una API compatible con StringBuffer, pero sin garantía de sincronización . Esta clase está diseñada para usarse como reemplazo directo de StringBuffer en lugares donde el búfer de cadena estaba siendo utilizado por un solo subproceso (como suele ser el caso). Siempre que sea posible, se recomienda utilizar esta clase con preferencia a StringBuffer, ya que será más rápida en la mayoría de las implementaciones.

Entonces se hizo para sustituirlo.

Lo mismo sucedió con Vectory ArrayList.

OscarRyz avatar Dec 10 '2008 04:12 OscarRyz