logo

Mutável e imutável em Java

Java é uma linguagem de programação orientada a objetos. Por ser uma linguagem de programação orientada a objetos, todos os métodos e mecanismos giram em torno dos objetos. Um conceito baseado em objeto é mutável e imutável em Java . Objetos em Java são mutáveis ​​ou imutáveis; depende de como o objeto pode ser iterado.

Nesta seção, discutiremos objetos mutáveis ​​e imutáveis ​​em Java. Além disso, veremos a diferença entre eles.

O que são objetos mutáveis

Os objetos mutáveis ​​são objetos cujo valor pode ser alterado após a inicialização. Podemos alterar os valores do objeto, como campo e estados, após a criação do objeto. Por exemplo, java.util.Date , StringBuilder , StringBuffer , etc.

Quando fazemos uma alteração em objetos mutáveis ​​existentes, nenhum novo objeto será criado; em vez disso, alterará o valor do objeto existente. As classes desses objetos fornecem métodos para fazer alterações nele.

Os Getters e Setters (métodos get() e set()) estão disponíveis em objetos mutáveis. O objeto Mutable pode ou não ser thread-safe.

Fundamentos de construção do Ubuntu

O que são objetos imutáveis

Os objetos imutáveis ​​são objetos cujo valor não pode ser alterado após a inicialização. Não podemos mudar nada depois que o objeto for criado. Por exemplo, objetos primitivos como int , longo , flutuador , dobro , todas as classes legadas, Classe de wrapper , Classe de cordas , etc.

Em suma, imutável significa não modificado ou imutável. Depois que os objetos imutáveis ​​são criados, seus valores e estado de objeto não podem ser alterados.

Apenas Getters (método get()) estão disponíveis e não Setters (método set()) para objetos imutáveis.

para loop java

Vamos ver como criar classes para objetos mutáveis ​​e imutáveis.

Como criar uma classe mutável

As duas coisas a seguir são essenciais para criar uma classe mutável:

  • Métodos para modificar os valores dos campos
  • Getters e Setters dos objetos

Considere o exemplo abaixo da classe mutável:

 public class JtpExample { private String s; JtpExample(String s) { this.s = s; } public String getName() { return s; } public void setName(String coursename) { this.s = coursename; } public static void main(String[] args) { JtpExample obj = new JtpExample('JavaTpoint'); System.out.println(obj.getName()); // Here, we can update the name using the setName method. obj.setName('Java Training'); System.out.println(obj.getName()); } } 

Saída:

 JavaTpoint Java Training 

No exemplo acima, estamos alterando o valor do nome usando o método setName.

Como criar uma classe imutável

As seguintes coisas são essenciais para criar uma classe imutável:

  • Classe final, que é declarada como final para que não possa ser estendida.
  • Todos os campos devem ser privados para que o acesso direto aos campos seja bloqueado.
  • Sem levantadores
  • Todos os campos mutáveis ​​​​devem ser finais para que não possam ser iterados depois de inicializados.

Considere o exemplo abaixo:

menu suspenso javascript
 public class JtpExample1 { private final String s; JtpExample1(final String s) { this.s = s; } public final String getName() { return s; } public static void main(String[] args) { JtpExample obj = new JtpExample('Core Java Training'); System.out.println(obj.getName()); } } 

Saída:

 Core Java Training 

Portanto, discutimos os objetos e classes mutáveis ​​​​e imutáveis. Vamos discutir as diferenças entre eles:

Diferença entre objetos mutáveis ​​e imutáveis

A seguir estão algumas diferenças importantes entre objetos mutáveis ​​​​e imutáveis ​​​​em Java :

  • Os objetos mutáveis ​​podem ser alterados para qualquer valor ou estado sem adicionar um novo objeto. Considerando que os objetos imutáveis ​​​​não podem ter seu valor ou estado alterado depois de criados. No caso de objetos imutáveis, sempre que alterarmos o estado do objeto, um novo objeto será criado.
  • Objetos mutáveis ​​fornecem um método para alterar o conteúdo do objeto. Comparativamente, os objetos imutáveis ​​não fornecem nenhum método para alterar os valores.
  • Os objetos mutáveis ​​suportam setters e getters. Comparativamente, os objetos imutáveis ​​suportam apenas setters, não getters.
  • Os objetos mutáveis ​​podem ou não ser thread-safe, mas os objetos imutáveis ​​são thread-safe por padrão.
  • Os exemplos de classes mutáveis ​​são StringBuffer, Java.util.Date, StringBuilder, etc. Enquanto os objetos imutáveis ​​são classes legadas, classes wrapper, classe String, etc.

Considere a tabela abaixo:

Mutável Imutável
Podemos alterar o valor de objetos mutáveis ​​após a inicialização. Uma vez que um objeto imutável é iniciado; Não podemos alterar seus valores.
O estado pode ser alterado. O estado não pode ser alterado.
Em objetos mutáveis, nenhum novo objeto é formado. Em objetos imutáveis, um novo objeto é formado quando o valor do objeto é alterado.
Ele fornece métodos para alterar o objeto. Ele não fornece nenhum método para alterar o valor do objeto.
Ele suporta os métodos get() e set() para delatar o objeto. Ele suporta apenas o método get() para passar o valor do objeto.
Classes mutáveis ​​podem ou não ser seguras para threads. Classes imutáveis ​​são thread-safe.
O essencial para criar uma classe mutável são métodos para modificar campos, getters e setters. Os fundamentos para criar uma classe imutável são classe final, campos privados e objetos mutáveis ​​finais.

Por que Strings em Java são imutáveis

String em Java é uma classe muito especial, pois é usada em quase todos os programas Java. É por isso que é Imutável para melhorar o desempenho e a segurança. Vamos entender isso em detalhes:

Em Java, strings usam o conceito de literais. Suponha que temos um objeto com muitas variáveis ​​de referência. Nesse cenário, se alterarmos o valor de uma variável de referência, isso afetará todo o objeto e todos os seus valores.

Além dos motivos acima, os seguintes motivos também são responsáveis ​​por tornar a String imutável:

Objetos imutáveis ​​são muito simples; não há necessidade de sincronização e são inerentemente seguros para threads. Porém, objetos imutáveis ​​são bons blocos de construção para outros objetos, por isso temos que prestar-lhes cuidados especiais.

A maioria dos desenvolvedores faz da String o objeto final para que não possa ser alterado posteriormente.

encontrar números bloqueados no Android

Conclusão

Discutimos objetos mutáveis ​​​​e imutáveis ​​​​em Java, agora temos uma compreensão clara de objetos e classes mutáveis ​​​​e imutáveis. Além disso, vimos como criar uma classe mutável e imutável.

Observa-se que objetos imutáveis ​​podem ter seu valor e estado alterados uma vez iniciados e podem ou não ser thread-safe. Comparativamente, os objetos imutáveis ​​não podem ser alterados para seu estado e valor e são thread-safe padrão.