logo

Por que String é imutável ou final em Java

Na programação orientada a objetos, o string ou objetos imutáveis que não pode ser modificado depois de criado. Mas só podemos alterar a referência ao objeto. Nós nos restringimos a alterar o próprio objeto. O String é imutável em Java por causa da segurança, sincronização e simultaneidade, armazenamento em cache e carregamento de classe. A razão de tornar a string final é destruir a imutabilidade e não permitir que outros a estendam.

Os objetos String são armazenados em cache no pool String e isso faz com que o String imutável . Os literais String armazenados em cache são acessados ​​por vários clientes. Portanto, sempre existe um risco, onde a ação executada por um cliente afeta todos os outros clientes. Por exemplo, se um cliente executar uma ação e alterar o valor da string de Pressão para PRESSÃO, todos os clientes restantes também lerão esse valor. Por motivos de desempenho, o armazenamento em cache de objetos String era importante, portanto, para remover esse risco, temos que tornar a String Imutável.

Por que String é imutável ou final em Java

Estas são mais algumas razões para tornar String imutável:

  • O pool String não pode ser possível se String não for imutável em Java. Muito espaço de heap é economizado por JRE . A mesma variável de string pode ser referenciada por mais de uma variável de string no pool. A internação de String também não pode ser possível se a String não for imutável.
  • Se não tornarmos a String imutável, ela representará uma séria ameaça à segurança do aplicativo. Por exemplo, nomes de usuário e senhas de banco de dados são passados ​​como strings para receber conexões de banco de dados. O programação de soquete descrições de host e porta também são passadas como strings. A String é imutável, portanto seu valor não pode ser alterado. Se a String não permanecer imutável, qualquer hacker poderá causar um problema de segurança na aplicação alterando o valor de referência.
  • A String é segura para multithreading devido à sua imutável. Threads diferentes podem acessar uma única 'instância de String'. Ele remove a sincronização para segurança de thread porque tornamos as strings implicitamente seguras para thread.
  • A imutabilidade dá a segurança de carregar a classe correta pelo Classloader. Por exemplo, suponha que temos uma instância em que tentamos carregar a classe java.sql.Connection, mas as alterações no valor referenciado para a classe myhacked.Connection causam coisas indesejadas em nosso banco de dados.

Vamos entender o conceito de imutável através de um exemplo.

ImutávelString.java

 import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString.concat('World'); System.out.println(NewString); } } 

Saída:

substituir tudo na string java
Por que String é imutável ou final em Java

Descrição: Podemos entender o exemplo acima com a ajuda do seguinte diagrama:

Por que String é imutável ou final em Java

No conjunto de constantes de string, o Olá permanece inalterado e um novo objeto string é criado com Olá Mundo . Isso mostra que as strings são imutáveis. A variável de referência aponta para o Olá não para o Olá Mundo.

Se quisermos que se refira ao Olá Mundo , temos que atribuí-lo explicitamente a essa variável. Por exemplo:

 import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString = NewString.concat('World'); System.out.println(NewString); } } 

Saída:

Por que String é imutável ou final em Java