Por que a String é imutável em Java?

Por que String é imutável em Java é uma das perguntas populares em entrevistas. A string é uma das classes mais utilizadas em qualquer linguagem de programação. Sabemos que String é imutável e final em Java. O tempo de execução do Java mantém um pool de String que a torna uma classe especial.

Por que String é imutável em Java?

Vamos analisar alguns dos benefícios da imutabilidade de String, que ajudarão a entender por que String é imutável em Java.

  1. O pool de String é possível apenas porque String é imutável em Java. Dessa forma, o tempo de execução do Java economiza muito espaço na heap porque diferentes variáveis de String podem se referir à mesma variável de String no pool. Se String não fosse imutável, a internação de String não seria possível, porque se qualquer variável mudasse o valor, isso seria refletido nas outras variáveis também.
  2. Se a String não for imutável, isso causaria uma grave ameaça à segurança da aplicação. Por exemplo, nome de usuário e senha do banco de dados são passados como String para obter conexão com o banco de dados e em programação de soquete, detalhes de host e porta são passados como String. Como String é imutável, seu valor não pode ser alterado; caso contrário, qualquer hacker poderia modificar o valor referenciado para causar problemas de segurança na aplicação.
  3. Como String é imutável, é seguro para multithreading. Uma única instância de String pode ser compartilhada entre threads diferentes. Isso evita o uso de sincronização para segurança de threads. Strings são implicitamente seguras para threads.
  4. Strings são usadas no carregador de classes java e a imutabilidade fornece segurança de que a classe correta está sendo carregada pelo Classloader. Por exemplo, pense em uma situação em que você está tentando carregar a classe java.sql.Connection, mas o valor referenciado é alterado para a classe myhacked.Connection que pode realizar ações indesejadas no seu banco de dados.
  5. Como String é imutável, seu hashcode é armazenado em cache no momento da criação e não precisa ser calculado novamente. Isso a torna uma ótima candidata para a chave em um Mapa e seu processamento é mais rápido do que outros objetos de chave HashMap. Por isso, String é a mais amplamente usada como chaves de HashMap.

Acima estão algumas das razões que eu poderia pensar que mostram os benefícios da imutabilidade de String. É uma ótima característica da classe Java String e a torna especial. Leia este post para saber como escrever sua própria classe imutável.

Você pode conferir mais exemplos de String em Java no nosso Repositório do GitHub.

Source:
https://www.digitalocean.com/community/tutorials/string-immutable-final-java