La diferencia entre String, StringBuilder y StringBuffer en Java (reimpreso)

La diferencia entre String, StringBuilder y StringBuffer en Java

  Cuando estaba aprendiendo Java recientemente, me encontré con una pregunta: ¿Cuáles son las diferencias entre las tres clases String, StringBuilder y StringBuffer? Busqué información en Internet y, después de comprenderla, la clasifiqué aquí para la comodidad de todos. También puede ayudarlo a profundizar su memoria sobre estos puntos de conocimiento durante su proceso de aprendizaje. Si hay algún error, corríjame.

  Las diferencias entre estas tres clases se encuentran principalmente en dos aspectos: la velocidad de ejecución y la seguridad del hilo.

  1. Primero que nada, hablemos de velocidad de ejecución, o velocidad de ejecución, en este sentido la velocidad de ejecución es: StringBuilder > StringBuffer > String

  La razón por la que String es el más lento:

  String es una constante de cadena, mientras que StringBuilder y StringBuffer son variables de cadena, es decir, una vez que se crea el objeto String, el objeto no se puede cambiar, pero los objetos de los dos últimos son variables y se pueden cambiar. Tome el siguiente fragmento de código como ejemplo:

 

1 cadena str="abc"; 
2 System.out.println(cadena); 
3 cadena=cadena+"de"; 
4 System.out.println(cadena);

 

  Si ejecuta este código, encontrará que primero se genera "abc" y luego se genera "abcde". Parece que el objeto str ha sido cambiado. De hecho, esto es solo una ilusión. Así es como maneja la JVM estas líneas de código. En primer lugar, cree un objeto String str y asigne "abc" a str. Luego, en la tercera línea, la JVM realmente crea un nuevo objeto también llamado str, y luego agrega el valor de str original y " de" Luego asígnelo a una nueva cadena, y la cadena original será reciclada por el mecanismo de recolección de basura (GC) de la JVM. Por lo tanto, la cadena en realidad no se ha cambiado. Es decir, el objeto Cadena mencionado anteriormente no se puede cambiar una vez. se crea.. Por lo tanto, la operación de objetos String en Java es en realidad un proceso de creación constante de nuevos objetos y reciclaje de objetos antiguos, por lo que la velocidad de ejecución es muy lenta.

  Los objetos de StringBuilder y StringBuffer son variables, operar con variables es cambiar directamente el objeto sin crear ni reciclar operaciones, por lo que la velocidad es mucho más rápida que String.

  Además, a veces asignamos valores a cadenas como esta

1 Cadena str="abc"+"de"; 
2 StringBuilder stringBuilder=new StringBuilder().append("abc").append("de"); 
3 System.out.println(cadena); 
4 System.out.println(stringBuilder.toString());

  De esta manera, los resultados de salida también son "abcde" y "abcde", pero la velocidad de String es mucho más rápida que la velocidad de respuesta de StringBuilder, esto se debe a que las operaciones en la línea 1 y

  Cadena cadena="abcde";

  es exactamente igual, por lo que será muy rápido, y si se escribe de la siguiente forma

1 Cadena str1="abc"; 
2 Cadena str2="de"; 
3 Cadena cadena=cadena1+cadena2;

  Luego, la JVM continuará creando y reciclando objetos para realizar esta operación como se mencionó anteriormente. La velocidad será muy lenta.

  2. Hablemos de la seguridad de los hilos

  En términos de seguridad de subprocesos, StringBuilder no es seguro para subprocesos, mientras que StringBuffer sí lo es.

  Si varios subprocesos en el búfer de cadenas utilizan un objeto StringBuffer, muchos métodos en StringBuffer pueden tener la palabra clave sincronizada, por lo que se puede garantizar la seguridad de los subprocesos, pero los métodos StringBuilder no tienen esta palabra clave, por lo que no se puede garantizar la seguridad de los subprocesos. , algunos incorrectos pueden ocurrir operaciones. Por lo tanto, si la operación a realizar es multiproceso, entonces se debe utilizar StringBuffer, pero en situaciones de un solo subproceso, se recomienda utilizar el StringBuilder más rápido.

  3. Resumir
  cadena: adecuado para una pequeña cantidad de operaciones de cadena

  StringBuilder: adecuado para realizar una gran cantidad de operaciones en el búfer de caracteres en un solo hilo

  StringBuffer: adecuado para realizar una gran cantidad de operaciones en el búfer de caracteres en subprocesos múltiples

 

-------------------------------------------------- -------- El artículo anterior es   una reimpresión del artículo escrito por el autor de Blog Garden Sufeng . Si el autor necesita que lo elimine, envíe un mensaje privado.

Supongo que te gusta

Origin blog.csdn.net/liyangufo/article/details/83449974
Recomendado
Clasificación