Descripción general y diferencias entre String, StringBuffer y StringBuilder

Visión de conjunto

String :

Cadena constante, la longitud de la cadena es inmutable.

StringBuffer :

Variables de cadena (sincronizadas, es decir, seguras para subprocesos). Si desea modificar el contenido de la cadena con frecuencia, es mejor usar StringBuffer por razones de eficiencia.Si desea convertir al tipo String, puede llamar al método toString () de StringBuffer.

Las operaciones principales son los métodos de adición e inserción:

  • El método append siempre agrega estos caracteres al final del búfer;
  • El método de inserción agrega caracteres en el punto especificado.

StringBuilder :

Variables de cadena (no seguras para subprocesos). Internamente, el objeto StringBuilder se trata como una matriz de longitud variable que contiene una secuencia de caracteres.

Esta clase proporciona una API compatible con StringBuffer, pero no garantiza la sincronización. Esta clase está diseñada para usarse como un simple reemplazo de StringBuffer, usado cuando el búfer de cadena es usado por un solo hilo (esta situación es muy común).


La diferencia entre los tres

StringY el tipo StringBufferde diferencia:

String es un objeto inmutable, por lo que cada vez que se cambia el tipo de String, se generará un nuevo objeto String y luego el puntero apuntará al nuevo objeto String, por lo que es mejor no usar String para cadenas que cambian de contenido con frecuencia.

Al usar la clase StringBuffer, cada vez que opere en el objeto StringBuffer en sí, en lugar de generar un nuevo objeto y cambiar la referencia del objeto. Por lo tanto, se recomienda utilizar StringBuffer en la mayoría de los casos, especialmente cuando el objeto de cadena cambia con frecuencia.

StringBuilderY StringBufferla diferencia entre:

StringBuffer es seguro para subprocesos, StringBuilder no es seguro para subprocesos.

En la misma situación, el uso de StringBuilder solo puede obtener una mejora de rendimiento de aproximadamente un 10% ~ 15% en comparación con el uso de StringBuffer, pero con el riesgo de inseguridad de subprocesos múltiples.

En la mayoría de los casos, StringBuilder> StringBuffer. Esto se debe principalmente a que el primero no necesita considerar la seguridad de subprocesos.


Usar estrategia

(1) Principios básicos: si desea manipular una pequeña cantidad de datos, use String; un solo subproceso manipule grandes cantidades de datos, use StringBuilder; multiproceso manipule grandes cantidades de datos, use StringBuffer.

(2) No use el "+" de la clase String para empalmes frecuentes, debido a que el rendimiento es extremadamente pobre, debe usar la clase StringBuffer o StringBuilder, que es un principio más importante en la optimización de Java.
P.ej:

String result = "";
for (String s : hugeArray) {
    
    
    result = result + s;
}

// 使用StringBuilder
StringBuilder sb = new StringBuilder();
for (String s : hugeArray) {
    
    
    sb.append(s);
}
String result = sb.toString();

Supongo que te gusta

Origin blog.csdn.net/qq_43229056/article/details/109255598
Recomendado
Clasificación