"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Pool de constantes de string: Por que \"new\" cria um novo objeto de string mesmo quando o literal existe?

Pool de constantes de string: Por que \"new\" cria um novo objeto de string mesmo quando o literal existe?

Publicado em 2024-11-06
Navegar:348

String Constant Pool: Why Does \

String Constant Pool: Um exame aprofundado

String literais em Java são agrupados para otimizar o uso de memória e melhorar o desempenho. Isso significa que quando um literal String é encontrado, o compilador verifica o String Constant Pool em busca de um objeto String existente com o mesmo valor. Se encontrada, a referência é direcionada ao objeto existente, evitando a criação de um novo.

No entanto, surge confusão ao usar o operador "novo" para criar um novo objeto String, pois isso aparentemente contradiz a regra de estagiar. Para esclarecer isso, vamos examinar as seguintes afirmações:

  • "Quando o compilador encontra uma String literal, ele verifica o pool para ver se uma String idêntica já existe."
  • "Em no caso de 'new', as referências a literais String ainda são colocadas na tabela de constantes, mas quando você usa 'new', a JVM é obrigada a criar um novo objeto String em tempo de execução, em vez de usar aquele da constante table."

Essas instruções indicam que, embora o literal String seja internado e armazenado no pool, o uso de "new" força a JVM a criar um novo objeto String. Isso significa que, apesar da existência de uma String equivalente no pool, o operador "new" a ignora e aloca um novo objeto na memória não-pool.

Para ilustrar isso, considere o seguinte exemplo:

String one = new String("test");
String two = "test";
System.out.println(one.equals(two)); // true
System.out.println(one == two); // false

Como esperado, o valor de "um" e "dois" é "teste", mas a comparação "==" retorna falso porque eles se referem a objetos String diferentes. Isso ocorre porque o uso de "new" força a criação de um novo objeto String para "one", mesmo que o "teste" literal de String já exista no pool.

Em resumo, o String Constant Pool otimiza uso de memória internando literais de String. No entanto, o uso de "new" ignora o pool e cria um novo objeto String na memória que não é do pool. Isso resulta em dois objetos String distintos com o mesmo valor, mas referências diferentes.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3