Bom dia Otavio! Tudo bem com você?
Entendo a sua dúvida e ela é bem comum quando começamos a trabalhar com a imutabilidade em Java, especialmente com o tipo String
. Quando falamos que um objeto String
é imutável, isso significa que, após a criação, o valor do objeto em si não pode ser alterado. No entanto, o que acontece no seu exemplo é que a variável nome
não está sendo modificada, mas sim está sendo apontada para um novo objeto String
.
Vamos entender isso passo a passo:
String nome = "Maria";
nome = "Alice";
Imutabilidade do Objeto: Quando criamos String nome = "Maria";
, um objeto String
com o valor "Maria"
é criado na memória. Como String
é imutável, esse valor não pode ser alterado
Mudança de Referência: Quando fazemos nome = "Alice";
, o que acontece é que a variável nome
, que antes apontava para o objeto "Maria"
, agora aponta para um novo objeto String
com o valor "Alice"
. O objeto "Maria"
ainda existe na memória, mas a variável nome
não o referencia mais
A parte que você menciona sobre a tipagem só ser declarada uma vez está correta. A tipagem serve para indicar ao compilador que tipo de dados a variável vai armazenar. Uma vez que o tipo é declarado (String
neste caso), podemos mudar o valor referenciado pela variável quantas vezes quisermos, desde que o novo valor seja compatível com o tipo da variável.
Em resumo temos que, a imutabilidade se aplica ao objeto String
em si, e não à variável que o referencia. A variável nome
pode ser alterada para apontar para um novo objeto String
sem precisar de uma nova declaração de tipo.
Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!