Sobes.tech
Junior

¿Qué es un pool de cadenas en Java?

sobes.tech AI

Respuesta de la IA

El String Pool (piscina de cadenas) es un área en la heap (montón) de la JVM donde se almacenan literales de cadenas. Cuando la JVM encuentra un literal de cadena, primero verifica esta piscina. Si la cadena ya existe, devuelve una referencia al objeto existente. Si no, crea un nuevo objeto de cadena en la piscina y devuelve una referencia a él.

Ventajas:

  • Ahorro de memoria: Varias referencias pueden apuntar al mismo objeto de cadena en la piscina.
  • Rendimiento: La comparación de referencias (==) para cadenas en la piscina es más rápida que la comparación del contenido de las cadenas (equals()).

Ejemplo:

// Crea una cadena en la piscina (si aún no existe)
String s1 = "hello";

// Devuelve una referencia al mismo objeto "hello" de la piscina
String s2 = "hello";

// s1 y s2 apuntan al mismo objeto
System.out.println(s1 == s2); // Imprimirá true

// Crea un nuevo objeto de cadena "hello" en el heap, no en la piscina
String s3 = new String("hello");

// s1 y s3 apuntan a objetos diferentes
System.out.println(s1 == s3); // Imprimirá false

// El contenido de las cadenas es igual
System.out.println(s1.equals(s3)); // Imprimirá true

El método intern() puede usarse para agregar explícitamente una cadena creada con new String() a la piscina o para obtener una referencia a una cadena existente en la piscina con el mismo contenido.

// Crea un nuevo objeto de cadena "world" en el heap
String s4 = new String("world");

// Agrega "world" a la piscina (si no está allí) y devuelve la referencia
String s5 = s4.intern();

// Crea una cadena en la piscina (referencia al mismo objeto al que ahora apunta s5)
String s6 = "world";

// s5 y s6 apuntan al mismo objeto en la piscina
System.out.println(s5 == s6); // Imprimirá true