1
resposta

Por que o if retorna true para a verificação de cc3 no ArrayList?

As contas instanciadas anteriormente foram adicionadas no ArrayList com o método .add().

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

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

Mas para a conta cc3 não foi usado esse método, apenas o método contains():

boolean existe = lista.contains(cc3);

Fiquei boiando ali perto do min 6:20 quando o laço for retornou que "Já tenho essa conta", sendo que (aparentemente) a conta cc3 não havia sido adicionada no ArrayList. Isso acontece por que o método contains() já insere o objeto no ArrayList ou é por alguma coisa que deixei passar?

Desde já agradeço a ajuda. : )

1 resposta

Oi Bruno, tudo bem com você?

Tudo que o método contains() faz é varrer uma lista comparando cada elemento dentro dela com o valor passado como parâmetro. Inclusive, internamente, essa comparação ocorre através do uso do método equals() que nós sobrescrevemos na aula!

Até o Nico implementar o método ehIgual() ou equals(), não deveria estar retornando essa mensagem. Já que se nós não avisarmos a classe Conta que as comparações devem ser feitas usando a agencia e o numero, ela continuará comparando as referências de cada objeto e continuará retornando false para o método contains(cc3) mesmo que duas contas tenham a mesma agencia e o numero.

Uma coisa que pode ter confundido também é que o Nico, mesmo após mudar o cc2 para cc3, ele não roda mais o código. Então a mensagem "Já tenho essa conta" na verdade é o resultado da comparação das contas com cc2, e não cc3.

Espero que isso ajude. Se algum ponto não ficou claro é só avisar!

Bons estudos!!