O que são objetos mutáveis/imutáveis ​​e para que servem?  - 1

"Olá, amigo!"

"Oi, Bilaabo!"

"Hoje Bilaabo falará sobre objetos mutáveis ​​e imutáveis .

"Os objetos que você pode alterar depois de criados são chamados de mutáveis ."

"Objetos que não podem ser alterados depois de criados são chamados de imutáveis ."

"O que determina se eu posso mudar um objeto?"

"O autor de uma nova classe pode tornar os objetos dessa classe imutáveis. Por exemplo, se você tornar todos os setters privados, um objeto terá apenas um construtor e getters; isso significa que será impossível alterá-lo depois de criado ."

"E qual seria o sentido disso?"

"Os objetos imutáveis ​​têm muitas propriedades úteis, mas vou destacar duas que são comuns a quase todos os objetos imutáveis:"

1) Objetos imutáveis ​​são muito mais fáceis de implementar do que objetos mutáveis.

2) Objetos imutáveis ​​podem ser usados ​​livremente em vários threads simultaneamente.

"Quando um desenvolvedor decide escrever uma classe imutável, ele geralmente cria uma versão mutável e uma versão imutável da classe."

"Mas qual é o sentido de escrever duas aulas em vez de uma?"

"Às vezes vale a pena quando uma versão imutável de um objeto é muito mais simples/rápida do que uma mutável. Então, eles fazem duas versões. É como ArrayList e LinkedList: ambos são listas, mas um é otimizado para propósitos específicos, e o segundo para os outros."

"Isso já faz mais sentido."

"Também existem classes puramente imutáveis, que não possuem uma versão mutável."

"Mas e se eu precisar mudar alguma coisa em um desses objetos? O que você pode realmente fazer com um objeto imutável?"

"Normalmente, as classes imutáveis ​​contêm vários métodos que agem como se alterassem o objeto, mas esses métodos simplesmente criam um novo objeto e o retornam, em vez de alterar o próprio objeto."

"Aqui estão alguns exemplos:"

código Java Descrição
String s = "london";
String s2 = s.toUpperCase();
Como resultado, s contém a string «london» e s2 contém «LONDON»
Integer i = 1;
Integer j = i;
j++;
Aqui está o que realmente acontece:
Integer i = new Integer(1);
inteiro j = i;
j = new Integer(i.getInt()+1);

"A classe String é uma classe imutável. Todos os objetos String são imutáveis, mas isso não nos impede de trabalhar com eles. Por exemplo, o método toUpperCase () da classe String converte uma String em maiúscula (ou seja, substitui todas as letras minúsculas com letras maiúsculas). No entanto, este método não altera a String em si, em vez disso, ele retorna uma nova String. Esta nova String é idêntica à primeira, exceto que todos os caracteres são maiúsculos (letras maiúsculas)."

"A classe Integer também é uma classe imutável. Todos os objetos Integer são imutáveis. Cada vez que alteramos um objeto Integer, na verdade estamos criando um novo objeto."

"Que interessante! Viva, Bilaabo."

"Viva para mim! Viva para Bilaabo!"