Red de conocimiento informático - Problemas con los teléfonos móviles - Análisis del código fuente de Stringbuilder

Análisis del código fuente de Stringbuilder

String, StringBuffer y StringBuilder en Java se usan comúnmente en programación, y la diferencia entre ellos también es una pregunta que se hace a menudo en las entrevistas. Ahora resuma y observe sus similitudes y diferencias.

1. Mutable e inmutable

La clase string usa una matriz de caracteres para guardar la cadena, de la siguiente manera: Debido al modificador "final", puedes saber que el objeto String es Inmutable.

Valor de carácter final privado [];

Tanto StringBuilder como StringBuffer heredan de la clase AbstractStringBuilder. En AbstractStringBuilder, las matrices de caracteres también se utilizan para guardar cadenas, como se muestra a continuación. dos Un objeto es mutable.

Valor Char[];

2. ¿Es seguro el subproceso múltiple?

Los objetos en String son inmutables y pueden entenderse como constantes, lo que obviamente es seguro para subprocesos.

AbstractStringBuilder es la clase padre pública * * de StringBuilder y StringBuffer. Define algunas operaciones básicas de cadenas, como expandCapacity, append, insert, indexOf y otros métodos * * * públicos.

StringBuffer tiene un bloqueo de sincronización en el método o método llamado, por lo que es seguro para subprocesos. Mire el código fuente a continuación:

1 Sincronización pública StringBuffer inversa() {

2 super . inversa()

3 Devuelve esto; p >

4 }

6 public int indexOf(String str) {

7 return indexOf(str, 0); es un índice int público sincronizado del método (string str, int from index).

8 }

StringBuilder no bloquea este método sincrónicamente, por lo que no es seguro para subprocesos.

3.StringBuilder es lo mismo que StringBuffer***

StringBuilder y StringBuffer tienen una * * * clase principal común, AbstractStringBuilder.

Una de las diferencias entre clases abstractas e interfaces es que algunas subclases se pueden definir en clases abstractas. Las subclases solo necesitan agregar nuevas funciones y no necesitan reescribir los métodos existentes, son solo declaraciones de métodos y definiciones; de constantes.

Los métodos de StringBuilder y StringBuffer llaman a métodos públicos en AbstractStringBuilder, como super.append(...). Sin embargo, StringBuffer agregará la palabra clave sincronizada al método para la sincronización.