O que é o Java String Pool?

Como o nome sugere, o String Pool in java é um pool de Strings armazenado na Java Heap Memory. Sabemos que String é uma classe especial em java e podemos criar objetos String usando um operador new, bem como fornecendo valores entre aspas duplas.

String Pool in Java

Aqui está um diagrama que explica claramente como o String Pool é mantido no espaço de heap do Java e o que acontece quando usamos diferentes maneiras de criar Strings. O String Pool é possível apenas porque a String é imutável em Java e sua implementação do conceito de String interning. O pool de strings também é um exemplo do padrão de design Flyweight. O String Pool ajuda a economizar muito espaço para o tempo de execução do Java, embora leve mais tempo para criar a String. Quando usamos aspas duplas para criar uma String, primeiro procuramos uma String com o mesmo valor no String Pool, se encontrada, ela apenas retorna a referência, caso contrário, cria uma nova String no pool e depois retorna a referência. No entanto, ao usar o operador `new`, forçamos a classe String a criar um novo objeto String no espaço de heap. Podemos usar o método `intern()` para colocá-lo no pool ou referir-se a outro objeto String do pool de strings com o mesmo valor. Aqui está o programa Java para a imagem do String Pool:

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));
    }

}

A saída do programa acima é:

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

Leitura recomendada: Classe de String Java.

Quantas Strings estão sendo criadas no Pool de Strings?

Às vezes em uma entrevista de Java, você será questionado sobre o pool de strings. Por exemplo, quantas strings estão sendo criadas na seguinte declaração;

String str = new String("Cat");

Na declaração acima, será criada apenas 1 ou 2 strings. Se já existir um literal de string “Cat” no pool, então apenas uma string “str” será criada no pool. Se não houver um literal de string “Cat” no pool, então ele será primeiro criado no pool e depois no espaço de heap, então um total de 2 objetos de string serão criados. Leia: Perguntas de Entrevista sobre Strings em Java

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