Olá João! Tudo bem?
Essa é uma dúvida muito comum de surgir no início da nossa jornada com Java.
Para entender melhor o que acontece quando utilizamos o método replace()
, é importante lembrar como variáveis e referências a objetos funcionam...
Quando instanciamos um objeto, sempre precisamos de uma variável para atribuir a referência a esse objeto, certo? como podemos ver na imagem abaixo:
Na imagem: (1)- Tipo da variável, (2)- Nome da variável, (3)- Intância do objeto
Como sabemos, String é um objeto... ou seja, temos uma classe String que possui métodos e atributos como outras classes que utilizamos. Esse objeto recebe um array de caracteres que atribuímos entre aspas duplas.
Então... quando atribuímos a uma variável do tipo String
uma sequencia de caracteres, estamos definindo a sequencia de caracteres imutável que essa instância do objeto String
terá.
Mas variáveis podem receber novas referências... e é isso que ocorre quando utilizamos o método replace()
da forma que vemos em seu exemplo.
Esse método nos retorna uma nova String com as alterações em relação a primeira String, e ocorre que você substituiu a referência que a variável nome
tinha no código que você usou como exemplo acima.
Quando fazemos isso:
nome = nome.replace("A", "a");
Estamos atribuindo uma nova referência à variável nome. Isso significa que a sequencia de caracteres que anteriormente estava sendo referenciada para essa variável não está mais, e uma nova está em seu lugar, com as alterações que o método replace()
fez nos caracteres.
Esse método cria uma cópia dos caracteres da primeira String, realiza a troca que nós o pedimos, e nos devolve uma nova String, como vemos na documentação oficial da Oracle. E imediatamente foi atribuída à variável nome
essa nova String, substituindo a referência ao objeto anterior.
Se procurássemos na memória do comutador, ainda encontraríamos um espaço de memória sendo ocupado pela primeira String, sem nenhuma alteração. Mas agora, como não temos uma variável referenciando essa instância, não a vemos mais, e o garbage collector do Java irá cuidar dela.
Consegui te ajudar a entender o que ocorre nesse caso?
Vou deixar aqui abaixo alguns links de outros posts aqui do fórum sobre esse mesmo tema... com certeza eles vão ajudar ainda mais a te esclarecer essa dúvida:
Se ainda tiver dúvidas sobre esse tema, é só falar!
Bons estudos!