Red de conocimiento del abogados - Preguntas y respuestas jurídicas - ¿Cuáles son las diferencias entre String, StringBuffere, StringBuilder y StringTokenizer en Java?

¿Cuáles son las diferencias entre String, StringBuffere, StringBuilder y StringTokenizer en Java?

Clase String

Clase String:

La clase java.lang.String, que no pertenece a los 8 tipos de datos básicos, String es un objeto que representa. una constante de cadena.

Debido a que el valor predeterminado de un objeto es nulo, el valor predeterminado de String también es nulo, pero es un tipo especial de objeto y tiene características que otros objetos no tienen.

New String() y new String("") declaran una nueva cadena vacía, que es una cadena vacía y no nula. Diferencia: a la cadena vacía se le asigna memoria a través del nuevo operador, es decir, realmente existe (definida). Pero nulo no lo es (solo se declara), y llamar al método de cadena nula generará una excepción de puntero nulo.

Comprenda fundamentalmente la clase java.lang.String y el grupo de cadenas.

1. La clase String es definitiva y no se puede heredar. Cadena de clase final pública.

2. La esencia de la clase String es una matriz de caracteres char[] y su valor no se puede cambiar. valor de carácter final privado [];

3. Los objetos de clase String tienen un método de creación especial, como String x="abc" "abc" representa un objeto de cadena y x es "abc" La dirección; del objeto se llama referencia "abc".

4. Java mantendrá un grupo de cadenas (grupo de cadenas) cuando se ejecute. El contenido de la cadena en el grupo de cadenas no se puede repetir, pero este grupo de búfer no existe para objetos generales (clases que no son cadenas). y el área de pila de objetos creados se usa solo para métodos.

5. Hay tres formas de crear una cadena:

lt; 1gt;, use la nueva palabra clave para crear una cadena, String s = new String("abc");

lt; 2gt;, Especifique directamente, String s = "abc";

lt; 3gt;, Utilice concatenación para generar una nueva cadena, String s = "ab" "c ";

Creación de un objeto de cadena:

1. Al usar cualquier método para crear un objeto de cadena, la JVM usará este objeto para encontrar si hay un objeto de cadena con el mismo contenido en el grupo de cadenas. Si no existe, cree una cadena s en el grupo; de lo contrario, no la agregue al grupo.

2. En Java, siempre que utilice la nueva clase de palabra clave para crear un objeto, definitivamente se creará un nuevo objeto (en el área del montón o pila).

3. Si utiliza especificación directa o concatenación de cadenas pura para crear un objeto String, solo verificará y mantendrá la cadena en el grupo de cadenas. Si no hay ninguna cadena en el grupo, cree una en el. pool. Si lo hay, devolverá directamente alguna dirección de objeto de cadena (referencia). El objeto String nunca más se creará en la pila.

4. El uso de una expresión que contiene variables para crear un objeto String no solo verificará y mantendrá el grupo de String, sino que también creará un objeto String en el área de la pila.

Inmutabilidad de la cadena:

Las cadenas inmutables tienen una gran ventaja: el compilador puede configurar la cadena para que sea única.

El tipo de cadena es inmutable, por ejemplo, cuando desea cambiar un objeto de cadena, como por ejemplo:

String s = "abc"

s =; " joder";

La JVM no cambiará el objeto original ("abc"), sino que generará un nuevo objeto String ("fuck"). Por supuesto, primero verifique si ya existe un "joder". cadena en el objeto del grupo de cadenas (si existe, haga referencia a ella; si no, créela), y luego señalémosla. Si el "abc" original no tiene ningún objeto que haga referencia a ella, el mecanismo de recolección de basura de la máquina virtual lo hará. recibirlo. ¡Esto puede mejorar la eficiencia operativa!

Nota: La comparación del contenido de cadenas en Java utiliza métodos especiales como igual, compareTo, etc. == compara si las referencias de cadenas son las mismas.

Clase StringBuffer:

Variable de cadena. Secuencia de cadena modificable, el espacio de memoria de la entidad objeto de esta clase puede cambiar automáticamente el tamaño para facilitar el almacenamiento de una secuencia de caracteres variable.

La clase StringBuffer tiene 3 métodos de construcción:

StringBuffer()

StringBuffer(int size)

StirngBuffer(String s)

Cuando se utiliza el primer constructor sin parámetros, la capacidad inicial de la entidad asignada al objeto puede acomodar 16 caracteres. Cuando la longitud de la secuencia de caracteres extendida es >16, la capacidad de la entidad aumenta automáticamente para acomodar los nuevos. Cadena.

Al utilizar el segundo constructor, puede especificar que la capacidad inicial de la entidad asignada al objeto sea el número de caracteres especificados por el parámetro de tamaño. Aumenta automáticamente cuando la longitud de la entidad del objeto es gt;tamaño.

Cuando se utiliza el tercer constructor, la capacidad inicial de la entidad asignada al objeto es la longitud de la cadena de parámetro s, que es de 16 caracteres cuando la longitud de la entidad del objeto es mayor que la capacidad inicial. , la capacidad de la entidad aumenta automáticamente.

El objeto StringBuffer se puede liberar para obtener la longitud de la secuencia de caracteres almacenada por la entidad a través de length(). Obtenga la capacidad real de la entidad actual mediante el método capacidad().

Clase StringTokenizer:

Utilice la clase java.util.StringTokenizer para analizar una cadena y dividirla en palabras que se pueden usar de forma independiente.

La clase StringTokenizer tiene dos métodos de construcción comúnmente utilizados:

StringTokenizer(String s): construye un analizador para cadenas s. Utilice el conjunto predeterminado de delimitadores, es decir, caracteres de espacio (varios caracteres de espacio se consideran un espacio), carácter de avance de línea, carácter de retorno de carro, carácter de tabulación y carácter de avance de papel (\f).

StringTokenizer(String s, String dilim): construye un analizador para string s. Los caracteres del parámetro dilim se utilizan como delimitadores.

Haga referencia al objeto StringTokenizer como un analizador de cadenas. Un analizador puede utilizar el método nextToken() para obtener los símbolos del idioma (palabras) en la cadena uno por uno. Siempre que se llame a nextToken(), se obtendrá el siguiente símbolo del idioma en la cadena. el análisis de cadena El valor de la variable responsable de contar en el dispositivo se reduce automáticamente en 1. El valor inicial de la variable de conteo es igual al número de palabras en la cadena (puede usar el objeto StringTokenizer para llamar a countTokens() método para obtener el valor de conteo).

Por ejemplo:

String str="somos stud, ents";

StringTokenizer fenxi = new StringTokenizer(str, ", "); Uso Los espacios y las comas se utilizan como separadores

int count=fenxi.countTokens();

while(fenxi.hasMoreElements())

{

Cadena s = fenxi.nextToken();

System.out.println(s);

}

System.out.println( "* **Hay palabras: " count ". ");

Además, StringTokenizer puede ser reemplazado por la función de división de la clase String

String str="abc; bcd;efg";

String[] splitStrs=str.split(";");

for(int i=0; ilt; splitStrs.length; i )

System .out.println(splitStrs[i]);

Clase StringBuilder La clase StringBuilder es nueva desde JDK 5. Esta clase proporciona una API compatible con StringBuffer, pero no garantiza la sincronización. Esta clase está diseñada como un reemplazo directo de StringBuffer cuando el búfer de cadena es utilizado por un solo subproceso (que es una situación común). La clase StringBuilder generalmente debe usarse con preferencia a la clase StringBuffer porque admite las mismas operaciones pero es más rápida ya que no realiza sincronización. Se recomienda preferir esta clase si es posible, ya que es más rápida que StringBuffer en la mayoría de los casos. Nota: No es seguro utilizar una instancia de StringBuilder con varios subprocesos. Si se requiere dicha sincronización, se recomienda utilizar la clase StringBuffer