Red de conocimiento informático - Problemas con los teléfonos móviles - La diferencia entre cadenas, búferes de cadenas y constructores de cadenas

La diferencia entre cadenas, búferes de cadenas y constructores de cadenas

String es una clase, pero es inmutable, por lo que String crea una especie de cadena constante, mientras que StringBuffer y StringBuilder son mutables. Por lo tanto, cada vez que se modifica el valor del objeto String, se debe crear un nuevo objeto y luego apuntar a este objeto. Usar StringBuffer es operar en el propio objeto StringBuffer. Por lo tanto, en los casos en que la cadena j cambia con frecuencia, usar StringBuffer es mucho más rápido.

Pero en algunos casos:

Código Java

Cadena S1 = "¿Quién" + "es" + "más rápido?"; >StringBuffer Stb = new StringBuilder("Who").append(" is")."Faster?"

Código Java

String S1 = "Who" + " is); " + " ¿más rápido?";

StringBuffer Stb = new StringBuilder("Who").append(" es ").append(" más rápido?");

El motivo el par S1 es mucho más rápido que Stb porque la JVM interpreta la concatenación de objetos String como la concatenación de objetos StringBuffer. En la JVM, la concatenación es:

Código Java

. String S1 ="¿Quién es más rápido?String s1="¿Quién";

String s2=" es";

String s3=" más rápido?";

String st=s1+s2+s3;

Código Java

Cadena s1="Quién"

Cadena s2=" es"; >

String s3=" ¿más rápido?";

String st=s1+s2+s3

Esta vez, String no es más rápido que StringBuffer

StringBuffer y StringBuilder

Al operar objetos de cadena, StringBuiler es el más rápido, StringBuffer es el segundo y String es el más lento.

Código Java

Clase final pública StringBuffer

extiende AbstractStringBuilder

implementa java.io CharSequence

public. clase final StringBuilder

extiende AbstractStringBuilder

implementa java.io CharSequence

clase final pública StringBuilder

extiende AbstractStringBuilder

implementa java.io.io. CharSequence

código Java

clase final pública StringBuffer

extiende AbstractStringBuilder

implementa java.io. .Serializable, CharSequence

Código Java io. Serializable, CharSequence

Clase final pública StringBuilder

extiende AbstractStringBuilder

implementa java.io. Serializable, CharSequence

Puedes ver que tanto StringBuffer como StringBuilder heredan la misma clase abstracta.

Java.lang.StringBuffer secuencia de caracteres mutables segura para subprocesos. Los buffers de cadenas son similares a las cadenas, pero no se pueden modificar. Aunque contiene una secuencia específica de caracteres en cualquier momento, la longitud y el contenido de la secuencia se pueden cambiar mediante ciertas llamadas a métodos.

Los buffers de cadenas son seguros de usar en múltiples subprocesos. Estos métodos se pueden sincronizar según sea necesario, por lo que todas las operaciones en cualquier instancia particular se producirán en un orden en serie coherente con el orden en que cada subproceso relevante llama a los métodos.

Cada buffer de cadena tiene una capacidad determinada. Siempre que la secuencia de caracteres contenida en el búfer de cadena no exceda esta capacidad, no es necesario asignar una nueva matriz de búfer interna. Si el buffer interno se desborda, la capacidad aumenta automáticamente.

Las operaciones principales en StringBuffer son los métodos anexar e insertar, que pueden anularse para aceptar cualquier tipo de datos. Cada método convierte efectivamente los datos proporcionados en una cadena y luego agrega o inserta los caracteres de la cadena en un búfer de cadena. Agregar siempre agrega estos caracteres al final del búfer; insertar agrega caracteres a la posición especificada.