Sobes.tech
Junior

O que é um pool de strings em Java?

sobes.tech IA

Resposta da IA

O String Pool (Pool de Strings) é uma área no heap (montículo) da JVM onde os literais de strings são armazenados. Quando a JVM encontra um literal de string, ela verifica primeiro este pool. Se a string já existir, ela retorna uma referência ao objeto existente. Caso contrário, cria um novo objeto de string no pool e retorna uma referência a ele.

Vantagens:

  • Economia de memória: Várias referências podem apontar para o mesmo objeto de string no pool.
  • Desempenho: A comparação de referências (==) para strings no pool é mais rápida do que a comparação do conteúdo das strings (equals()).

Exemplo:

// Cria uma string no pool (se ainda não existir)
String s1 = "hello";

// Retorna uma referência ao mesmo objeto "hello" do pool
String s2 = "hello";

// s1 e s2 referenciam o mesmo objeto
System.out.println(s1 == s2); // Vai imprimir true

// Cria um novo objeto de string "hello" no heap, não no pool
String s3 = new String("hello");

// s1 e s3 referenciam objetos diferentes
System.out.println(s1 == s3); // Vai imprimir false

// O conteúdo das strings é igual
System.out.println(s1.equals(s3)); // Vai imprimir true

O método intern() pode ser usado para adicionar explicitamente uma string criada com new String() ao pool ou para obter uma referência a uma string existente no pool com o mesmo conteúdo.

// Cria um novo objeto de string "world" no heap
String s4 = new String("world");

// Adiciona "world" ao pool (se ainda não estiver lá) e retorna a referência
String s5 = s4.intern();

// Cria uma string no pool (referência ao mesmo objeto ao qual s5 agora aponta)
String s6 = "world";

// s5 e s6 referenciam o mesmo objeto no pool
System.out.println(s5 == s6); // Vai imprimir true