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.
- 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.
- 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.
- 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.
- 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 classemyhacked.Connection
, que pode fazer coisas indesejadas no seu banco de dados. - 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