En Java, String, StringBuffer y StringBuilder a menudo se usan clases de cadena en programación. La diferencia entre ellos también es una pregunta que a menudo se hace en las entrevistas. Ahora resume y vea cómo son diferentes y lo mismo.
1. Variable e inmutable
La clase de cadena usa una matriz de caracteres para guardar cadenas, de la siguiente manera: debido a que hay un modificador "final", puede saber que los objetos de cadena son inmutables.
Valor de char final privado [];
Tanto StringBuilder como StringBuffer se heredan de la clase AbstractStringBuilder. En AbstractStringBuilder, las matrices de personajes se utilizan para guardar cadenas. De la siguiente manera, se puede ver que ambos objetos son mutables.
Char [] valor;
2. ¿Es multiproceso y seguro?
Los objetos en la cadena son inmutables, por lo que pueden entenderse como constantes, que obviamente son seguras de hilo.
AbstractStringBuilder es una clase pública de StringBuilder y StringBuffer, que define algunas operaciones básicas de cadenas, como ExpandCapacity, Append, Insert, IndexOf y otros métodos públicos.
StringBuffer ha agregado un bloqueo de sincronización al método o un bloqueo de sincronización al método llamado, por lo que es a prueba de subprocesos. Consulte el siguiente código fuente:
public sincronized StringBuffer Reverse () {super.reverse (); return this;} public int indexOf (String str) {return indexOf (str,); // Hay un método público sincronizado int indexOf (string str, int fromindex)} StringBuilder no agrega bloqueos de sincronización al método, por lo que no es seguro para el hilo.
3. StringBuilder y StringBuffer en común
StringBuilder y StringBuffer tienen clases de padres públicos AbstractStringBuilder (clase abstracta).
Una de las diferencias entre las clases e interfaces abstractas es que algunos métodos públicos de subclases pueden definirse en clases abstractas. Las subclases solo necesitan agregar nuevas funciones y no necesitan repetir los métodos existentes; mientras que las interfaces solo definen métodos y constantes.
Los métodos de StringBuilder y StringBuffer llamarán métodos públicos en AbstractStringBuilder, como Super.append (...). Es solo que StringBuffer agregará una palabra clave sincronizada al método y la sincronizará.
Finalmente, si el programa no está multiprocesado, entonces usar StringBuilder es más eficiente que StringBuffer.
Resumen de la diferencia entre String StringBuffer StringBuilder en Java
* La clase de cadena es una clase inmutable. Mientras se modifique la cadena, se generarán nuevos objetos.
* StringBuffer y StringBuilder son clases mutables, y no se generan objetos nuevos por ningún cambio en las cadenas.
Al usarlo en la práctica, si a menudo necesita modificar una cadena, como inserción, eliminación, etc.
* Pero, ¿cuál es la diferencia entre StringBuffer y StringBuilder?
StringBuffer es seguro de hilo y es muy conveniente de usar en programas de subprocesos múltiples, pero la eficiencia del programa será más lenta.
StringBuilder no es seguro de hilo y es más eficiente que StringBuffer en un solo hilo.
* En general, el tiempo de ejecución de los tres:
String> StringBuffer> StringBuilder