Sobes.tech
Middle

Por que o valor do tipo String em Java não pode ser alterado?

sobes.tech IA

Resposta da IA

O valor do tipo String em Java é imutável porque:

  • Uso eficiente do pool de strings (String Pool): A JVM mantém um pool de strings para economizar memória. Strings imutáveis permitem que várias variáveis apontem para o mesmo objeto no pool sem risco de uma alteração afetar as outras.
  • Segurança em múltiplos threads: Como os objetos de string são imutáveis, podem ser compartilhados com segurança entre threads sem necessidade de sincronização externa. Isso simplifica a programação multithread.
  • Uso como chaves em coleções: String é frequentemente usado como chave em coleções como HashMap e HashSet. A imutabilidade garante que o código hash do objeto permaneça constante durante sua vida útil, o que é crucial para o funcionamento correto dessas estruturas de dados. Alterar um objeto usado como chave quebraria sua estrutura interna.
  • Segurança: Os objetos de string são usados para representar dados importantes, como nomes de arquivos, endereços de rede e senhas. A imutabilidade impede alterações acidentais ou maliciosas nesses valores após sua criação.

Quando parece que o valor de uma string "muda" (por exemplo, ao concatenar strings), na verdade, um novo objeto String é criado.

// String original no pool
String s1 = "Hello";

// Um novo objeto "Hello World" é criado, s1 continua apontando para "Hello"
String s2 = s1 + " World";

Para operações que requerem mudanças frequentes em strings, usam-se classes mutáveis como StringBuilder (não thread-safe) ou StringBuffer (thread-safe).