¿Qué es el Pool de Cadenas de Java?

Como su nombre sugiere, String Pool en Java es un conjunto de Strings almacenados en la Memoria del Montón de Java. Sabemos que String es una clase especial en Java y podemos crear objetos String utilizando el operador new así como proporcionando valores entre comillas dobles.

String Pool en Java

Aquí hay un diagrama que explica claramente cómo se mantiene el Pool de Cadenas en el espacio de la memoria heap de Java y qué sucede cuando usamos diferentes formas de crear Cadenas. El Pool de Cadenas es posible solo porque la Clase String es inmutable en Java y su implementación del concepto de internado de Cadenas. El pool de cadenas también es un ejemplo del patrón de diseño Flyweight. El Pool de Cadenas ayuda a ahorrar mucho espacio para la ejecución de Java aunque lleva más tiempo crear la Cadena. Cuando usamos comillas dobles para crear una Cadena, primero busca una Cadena con el mismo valor en el Pool de Cadenas, si la encuentra simplemente devuelve la referencia, de lo contrario crea una nueva Cadena en el pool y luego devuelve la referencia. Sin embargo, al usar el operador new, obligamos a la clase String a crear un nuevo objeto de Cadena en el espacio de la memoria heap. Podemos usar el método intern() para colocarlo en el pool o hacer referencia a otro objeto de Cadena del pool de cadenas que tenga el mismo valor. Aquí está el programa Java para la imagen del Pool de Cadenas:

package com.journaldev.util;

public class StringPool {

    /**
     * Java String Pool example
     * @param args
     */
    public static void main(String[] args) {
        String s1 = "Cat";
        String s2 = "Cat";
        String s3 = new String("Cat");
        
        System.out.println("s1 == s2 :"+(s1==s2));
        System.out.println("s1 == s3 :"+(s1==s3));
    }

}

La salida del programa anterior es:

s1 == s2 :true
s1 == s3 :false

Lectura recomendada: Clase String de Java

¿Cuántas cadenas se están creando en el String Pool?

A veces en una entrevista de Java, te harán una pregunta sobre el String Pool. Por ejemplo, ¿cuántas cadenas se están creando en la siguiente declaración;

String str = new String("Cat");

En la declaración anterior, se creará una o dos cadenas. Si ya existe una cadena literal “Gato” en el pool, entonces solo se creará una cadena “str” en el pool. Si no hay una cadena literal “Gato” en el pool, entonces primero se creará en el pool y luego en el espacio de montón, por lo que se crearán un total de 2 objetos de cadena. Leer: Preguntas de Entrevista sobre Cadenas en Java

Source:
https://www.digitalocean.com/community/tutorials/what-is-java-string-pool