Junior
¿Qué es un pool de cadenas en Java?
sobes.tech AI
Respuesta de la IA
La piscina de cadenas (String pool) es una área especial de memoria en el montón (heap) de Java, donde se almacenan literales de cadenas y cadenas internadas. Su objetivo principal es ahorrar memoria mediante la reutilización de valores de cadenas iguales.
Cómo funciona:
Cuando se crea un literal de cadena (por ejemplo, "hola"), la JVM primero verifica si ya existe una cadena con ese mismo valor en la piscina de cadenas.
- Si la cadena existe: La JVM devuelve una referencia al objeto ya existente en la piscina, en lugar de crear uno nuevo.
- Si la cadena no existe: La JVM crea un nuevo objeto
Stringen la piscina y devuelve una referencia a él.
Creación de cadenas y piscina:
- Usando un literal de cadena:
// "hola" es un literal de cadena String s1 = "hola"; String s2 = "hola"; // s1 y s2 referenciarán al mismo objeto en la piscina de cadenas - Usando el constructor
new String():String s3 = new String("mundo"); String s4 = new String("mundo"); // s3 y s4 referenciarán a diferentes objetos en el heap, aunque tengan el mismo valor. // El literal de cadena "mundo" puede estar en la piscina, pero los objetos s3 y s4 están fuera de ella. - Método
intern():String s5 = new String("java"); // El método intern() verifica si hay una cadena con ese valor en la piscina String s6 = s5.intern(); // Si existe, devuelve la referencia al objeto en la piscina. // Si no, añade la cadena actual a la piscina y devuelve la referencia.
Ventajas de la piscina de cadenas:
- Ahorro de memoria: Reduce la cantidad de objetos de cadenas duplicados.
- Mejora del rendimiento: La comparación de cadenas con literales (
==) puede ser más rápida que la comparación de objetosStringconequals(), si ambos operandos hacen referencia al mismo objeto en la piscina.
Nota importante:
La comparación de cadenas con el operador == verifica si dos variables hacen referencia al mismo objeto en memoria. Para comparar el contenido de las cadenas, siempre use el método equals().
String str1 = "abc"; // En la piscina
String str2 = "abc"; // En la piscina, la misma referencia
String str3 = new String("abc"); // Fuera de la piscina
String str4 = str3.intern(); // En la piscina, la misma referencia que str1 y str2
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
System.out.println(str1 == str4); // true
System.out.println(str1.equals(str3)); // true