Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Método equals( ) - comparando objetos. Objetos são criados em endereço diferente na memória?

Java parte 6: conhecendo o Java.util Aula 4, atividade 1.

O professor diz o seguinte quanto ao código abaixo: "Como sabemos, a referência cc3 não existe na lista, contudo, os dados da conta são exatamente os mesmos da cc2. Na prática, as duas referências representam uma mesma conta, um mesmo objeto na memória."

Minha dúvida: quando criamos dois ou mais objetos com new cada um deles são criados em endereço diferente na memória? Se são, como cc2 e cc3 podem estar representando uma mesma conta, um mesmo objeto na memória se cada referência representa um new diferente: Conta cc2 = new ContaCorrente( 22, 11); Conta cc3 = new ContaCorrente( 22, 11); ? Não são dois objetos distintos com argumentos iguais? o método equals( ) depois de reescrito compara objetos ou seus argumentos?

//código omitido

//Generics ArrayList lista = new ArrayList();

    Conta cc = new ContaCorrente(22, 11);
    lista.add(cc);

    Conta cc2 = new ContaCorrente(22, 22);
    lista.add(cc2);

    Conta cc3 = new ContaCorrente(22, 22);        
    boolean existe = lista.contains(cc3);

    System.out.println("Já existe? " + existe);

    for(Conta conta : lista) {
            System.out.println(conta);
3 respostas
solução

Acho que o instrutor se confundiu quando escreveu isso, veja o que ele diz no minuto 02:47 até 03:13.

"Dois objetos em memória que representam a mesma conta no mundo real."

Fala Ivo, tranquilo?

No caso quando damos new em dois momentos diferentes, estamos criando duas referências distintas na memória, por mais que neste caso o conteúdo dentro de cada uma delas seja o mesmo.

Ao sobrescrevermos o método equals, definimos que para uma conta ser igual a outra basta com que os atributos agencia e numero sejam iguais.

Então, por mais que sejam referências diferentes na memória, caso os dois atributos sejam iguais, será retornado true.

Obrigado, Edson. Obrigado Daniel.