Red de conocimiento informático - Aprendizaje de programación - Lenguaje Java: ¿Cuál es la diferencia entre el método concat de la clase String y el método append de la clase StringBuffer? ¿Estado de la memoria?

Lenguaje Java: ¿Cuál es la diferencia entre el método concat de la clase String y el método append de la clase StringBuffer? ¿Estado de la memoria?

Primero, veamos algunos conceptos:

1: En Java, se sobrecarga durante el proceso de procesamiento de String, se crea un objeto StringBuffer y el método append de. el objeto StringBuffer se utiliza para conectarse y finalmente llamar al método toString para devolver la cadena String.

2: Cuando se opera con concat, primero se abre un espacio para empalmar la cadena, y luego la cadena anterior se empalma en una nueva cadena, creando así tres espacios en la memoria del montón

Entonces, primero hablemos de la diferencia entre 1 y 2: Línea 1: utilizada en la parte inferior, las cadenas se conectan mediante el método append del objeto StringBuffer, pero no se agregan directamente. abierto? "abc""def""ghi" acaba de abrir tres espacios de memoria del montón e implementar uno. "abcdef" es el cuarto espacio de memoria. El resultado final es "abcdefghi", que abre el quinto espacio de memoria del montón. es reciclado.

Línea 2: También abre cinco espacios de memoria dinámica. Podemos buscar en el código fuente de concat() la diferencia entre concat() y número: public?String?concat(String?str)?{

int?otherLen?=?str.length();

if(otherLen?==?0)?{

return?this;

}

int?len?=?value.length;

/*copyOf Al copiar una matriz, el segundo argumento de copyOf() especifica la nueva matriz a ser creado. length,

Si la longitud de la nueva matriz excede la longitud de la matriz original, mantenga el valor predeterminado nulo o 0*/

char?buf[] =? ?Arrays.copyOf( value,?len? ?otherLen);

//Copie los caracteres de la cadena en la matriz de caracteres de destino, len es el desplazamiento inicial en la matriz

str.getChars( buf,?len);

return?new?String(buf,?true);

}

Podemos ver que el concat () el método pasa los métodos copyOf() y getChars(); En la parte inferior, concatena las cadenas mediante el método append del objeto StringBuffer.

Finalmente, StringBuffer: cuando se usa StringBuffer, solo se abrirá un espacio de memoria. Cuando se usa append para agregar o eliminar su contenido, también se hará en este espacio de memoria y no habrá espacio adicional. generado. Por lo tanto, la velocidad es relativamente rápida. Cada uso del objeto String tendrá un impacto en el rendimiento del sistema, especialmente cuando hay muchos objetos sin referencia en la memoria, JVM GC comenzará a funcionar y el impacto en la velocidad definitivamente será. ser considerable.