Olá, sou iniciante em java e o meu ArrayList está sobrescrevendo os dados do objeto, alguém saberia me dizer o que está acontecendo? segue meu código fonte.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Pessoa> listaPessoas = new ArrayList<Pessoa>();
Pessoa pessoa = new Pessoa();
pessoa.setNome("João");
pessoa.setIdade(58);
listaPessoas.add(pessoa);
pessoa.setNome("Maria");
pessoa.setIdade(39);
listaPessoas.add(pessoa);
for(int i = 0; i < listaPessoas.size(); i++) {
System.out.println("Nome "+listaPessoas.get(i).getNome());
System.out.println("Idade "+listaPessoas.get(i).getIdade());
}
}
}
A saída está sobrescrevendo:
Nome Maria
Idade 39
Nome Maria
Idade 39
Não é o ArrayList que está sobrescrevendo, é quando você redefine os valores dos atributos da variável pessoa, por se tratar da mesma referência.
A List (especificamente suas implementações, ArrayList e LinkedList) não são caixas, como se pode imaginar, onde você coloca os objetos. Elas apenas referenciam a posição de memória do objeto inserido em cada posição.
Assim sendo, se você tem isso:
Pessoa pessoa = new Pessoa();
pessoa.setNome("João");
pessoa.setIdade(58);
listaPessoas.add(pessoa);
pessoa.setNome("Maria");
pessoa.setIdade(39);
listaPessoas.add(pessoa);
Você terá a mesma referência em posições diferentes, causando o problema.
Como corrigir?
Para cada nova “pessoa”, crie uma instância nova
pessoa = new Pessoa();
1 curtida
Obrigado darlan_machado, consegui resolver o problema com sua dica
, coisa simples mas para quem está aprendendo é uma dor de cabeça.