Java String Constant Pool
Quando você declara uma nova string em Java, algumas coisas interessantes acontecem nos bastidores. Esta é uma declaração de string básica. Criamos uma nova variável de string chamada funcionário e atribuímos a ela um valor, como você pode ver no código:
Funcionário da string = "Edgar Allen Poe";
O Java não apenas criará a variável funcionário , mas também alocará espaço na memória para o valor literal ‘Edgar Allen Poe’. Essa área da memória é chamada de pool de constantes de string . É como um conjunto de valores de string disponíveis para outras partes do programa.
Agora, se você criou outra variável, digamos funcionário2 , e TAMBÉM deu a ela o valor ‘Edgar Allen Poe’, o Java simplesmente reutiliza o valor que já está no pool.
![]() |
Você notará que o pool de constantes de string fica dentro de uma seção da memória chamada heap . Esta é uma parte da memória que é usada para operações em tempo de execução, trabalhando com classes e objetos. Pense em uma pilha como um pedaço de solo de jardim de onde você pode facilmente tirar terra e plantas enquanto planta um jardim. Java coloca esses novos objetos lá. Se você criar mais cem objetos, Java criará mais cem literais no topo do heap.
Criação de uma nova instância de string
Se você criar uma nova instância da classe String, o pool de constantes funcionará de maneira diferente. Vamos ficar com o exemplo do funcionário e criar outra variável, funcionário3, e também dar a ela o mesmo valor literal. Desta vez, no entanto, criaremos uma nova instância da classe String:
String funcionário3 = nova String ("Edgar Allen Poe");
Quando esse código é processado, o Java agirá de maneira um pouco diferente. Em vez de reutilizar o mesmo literal novamente, ele criará um novo valor na memória. Nesse caso, ele não o cria no conjunto de constantes da string, mas no heap de memória.
![]() |
Uma nota sobre imutabilidade
Literais de string são imutáveis . Isso significa que eles não mudam. Sim, você pode reatribuir um novo valor literal de string para employee2 . No entanto, o Java ainda armazenou ‘Edgar Allen Poe’ no conjunto de constantes da string. Isso não vai embora. Digamos que criamos nossa variável de funcionário, mas depois alteramos seu valor para ‘Jane Austen’. O diagrama a seguir mostra o que acontece no pool de constantes da string.
![]() |
Resumo da lição
Vamos levar alguns minutos para revisar o que aprendemos sobre o pool de constantes de string Java …
O conjunto de constantes de string Java é uma área na memória heap onde Java armazena valores de string literais. O heap é uma área da memória usada para operações de tempo de execução. Quando uma nova variável é criada e recebe um valor, o Java verifica se esse valor exato existe no pool. Em caso afirmativo, esse valor é reutilizado para a nova variável. Caso contrário, ele cria uma nova string literal.
No entanto, se você criar uma nova instância de um objeto String, ela criará um novo literal de string no pool, mesmo se já existir um. Literais de string são imutáveis , o que significa que não mudam. Sim, você pode alterar o valor de uma string, mas depois que criamos um literal, esse literal permanece no pool.