El valor del código fuente de la cadena
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. Consulte el código fuente a continuación:
1?Public? ¿sincrónico? ¿StringBuffer? contrarrestar()? {
2?super .reverse();
3?Regresar? Esto;
4?}
5?
6?Público? int? indexOf(cadena?cadena)? {
7?¿Volver? indexOf(cadena, 0); //¿Existe? ¿público? ¿sincrónico? int? indexOf(cadena?cadena,?int?fromIndex)? Método
8?} StringBuilder no sincroniza el método de bloqueo, 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.
Finalmente, si el programa no es multiproceso, usar StringBuilder es más eficiente que StringBuffer.