Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Imutabilidade da String

Olá, ao assistir a aula ficou entendido que uma vez definido o valor da String não é possível alterar a mesma, porém em um teste com o código:

String teste = "Hello world";
System.out.println(teste);

teste = "Olá mundo";
System.out.println(teste);

O código exibe as duas atribuições que dei a variável teste, no caso para cada String foi criado um endereço na memória e referenciado à variável? Minhas duvidas seriam, no caso do trecho de código que postei, a String "Hello world" por não estar referenciando à variável teste se tornaria 'sujeira' na memória? Se eu definisse teste = "Hello world" novamente seria criado um novo endereço de memória?

Desculpe se não expressei de forma clara a duvida.

1 resposta
solução!

Oie Renan, tudo bem contigo?

Nesse seu exemplo o que aconteceu não foi uma alteração do valor da variável "teste" mas sim uma troca de referência, quando você declarou a variável "teste", você criou um objeto e indicou que essa variável iria apontar para o endereço na memória desse objeto. No segundo momento, quando você faz o "teste = "Olá Mundo"', você está criando um novo objeto e indicando para a variável "teste" o endereço na memória dessa variável. Então não houve alteração no valor da String mas sim na referencia de memoria.

Indo às suas dúvidas:

"O código exibe as duas atribuições que dei a variável teste, no caso para cada String foi criado um endereço na memória e referenciado à variável?"

R: Sim, como explicado acima foi criado um novo endereço de memória para cada um deles.

"No caso do trecho de código que postei, a String "Hello world" por não estar referenciando à variável teste se tornaria 'sujeira' na memória?"

R: No Java temos uma coisa chamada "pool de strings", quando você cria uma variável do tipo "String" dentro do "pool" será criado um novo objeto com o valor que você definiu, caso você crie outra "String" o Java vai ir no "pool de strings" e verificar se já existe um objeto com esse valor, se existir essa nova variável vai apontar para esse endereço de memória e não criar um novo objeto. Nesse seu caso foram criados dois objetos no "pool de strings", um para o "Hello World" e outro para "Olá Mundo". Como podemos observar, o "pool de strings" foi feito justamente para reduzir o uso da memória do computador, por isso não seria uma "sujeira".

"Se eu definisse teste = "Hello world" novamente seria criado um novo endereço de memória?"

R: Não, o Java iria no "String Pool" e encontraria um objeto com esse valor, assim o "teste" só iria apontar para o endereço de memória dessa variável.

Se tiver interesse, encontrei um artigo que explica mais profundamente sobre esse assunto, clique aqui para ver.

Aqui na Alura, nessa aula aqui, também é tratado um pouco sobre as Strings.

Espero que tenha ajudado! Se tiver mais alguma dúvida fico a disposição :)

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software