Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida no Ex. 9 da Aula 5 - Declare e use um ArrayList - Porque não alterou o valor no ArrayList?

Porque o valor de referencia não é passado para o valor interno do ArrayList, já que String é um objeto em java? Vi que tem uam questao parecida, mas aqui estou mudando a referencia que é passada para o ArrayList, nao o valor retornado

     ArrayList<String> lista = new ArrayList<String>();
        String referencia = "alura";
        lista.add(referencia);
        String interno = lista.get(0);
        referencia = "caelum";
        System.out.println(interno);  // alura
        System.out.println(referencia); // caelum
        System.out.println(lista.get(0)); // alura
3 respostas

Oi Alexandre

     ArrayList<String> lista = new ArrayList<String>();
        String referencia = "alura";
        lista.add(referencia);

No código acima o que ocorre é que estamos falando para a lista apontar para o valor em memória que a referencia aponta, nesse caso, a string "alura".

Quando mudamos a string em

referencia = "caelum";

Estamos dizendo para a variável referencia apontar para uma nova string. Perceba que a variável referencia e cada posição na lista são variáveis diferentes. Então quando mudamos o valor de "referencia" não irá mudar o valor de "lista.get(0)"

Ok, o que eu entendi é que variável do tipo String é copiada como valor para dentro da lista, mesmo String sendo um objeto em Java, é isso?

solução!

Sim, o que está acontecendo é que a referência é passada por valor, ou seja, uma cópia da referência à String é passada.

Se quiser aprofundar nesse assunto: https://www.programcreek.com/2013/09/string-is-passed-by-reference-in-java/