Por que a String é imutável em Java?

Por que String é imutável em Java é uma das perguntas de entrevista populares. A string é uma das classes mais usadas 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 examinar alguns dos benefícios da imutabilidade de String, que ajudarão a entender por que String é imutável em Java.

  1. Pool de String é possível apenas porque String é imutável em Java. Dessa forma, o tempo de execução do Java economiza muita espaço de 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, pois se uma variável alterasse o valor, isso seria refletido nas outras variáveis ​​também.
  2. Se a String não for imutável, isso poderá causar uma grave ameaça à segurança da aplicação. Por exemplo, o nome de usuário e senha do banco de dados são passados como String para obter uma conexão com o banco de dados, e em programação de socket, os detalhes do host e da porta são passados como String. Como a String é imutável, o valor dela 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 a String é imutável, ela é segura para multithreading. Uma única instância de String pode ser compartilhada entre diferentes threads, evitando o uso de sincronização para garantir a segurança das threads. As Strings são implicitamente seguras para threads.
  4. As Strings são usadas no classloader do Java, e a imutabilidade proporciona segurança, garantindo que a classe correta seja 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 fazer coisas indesejadas no seu banco de dados.
  5. Como a String é imutável, seu hashcode é armazenado em cache no momento da criação e não precisa ser calculado novamente. Isso a torna uma excelente opção para a chave em um Mapa, e seu processamento é mais rápido do que outros objetos de chave do HashMap. Por isso, a String é amplamente utilizada como chave em HashMaps.

Acima estão algumas das razões que consigo pensar que mostram os benefícios da imutabilidade de strings. É 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 strings em Java no nosso Repositório no GitHub.

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