4
respostas

Mesmo com a agência, número e nome iguais, o código entra no else e retorna o resultado diferente.

package br.com.caelum.fj11.programa;

import br.com.caelum.fj11.modelo.Conta; import br.com.caelum.fj11.modelo.OutraConta;

public class TestaInteger {

public static void main(String[] args) {

Conta conta1 = new OutraConta(111, 222, "Ana"); Conta conta2 = new OutraConta(111, 222, "Ana");

if (conta1.equals(conta2)) { System.out.println("Igual"); } else { System.out.println("Diferente");

} }

}

4 respostas

Oi, nesse caso você está comparando as referências e como são objetos diferentes, eles possuem referências diferentes. Experimente imprimir "conta1" e "conta2". E veja o que sai. System.out.println(conta1) System.out.println(conta2)

Implemente a interface Comparable e sobreescreva equals e hashcode na sua classe Conta.

Apesar dos meus dados inseridos nas duas contas, elas são objetos diferentes, que remetem a uma posição de memória diferente.

O método equals() não vai verificar o conteúdo e sim se são o mesmo objeto ou não.

Phillippe, o equals irá sim comparar o objeto se for sobreescrito para comparar algum parametro que diga se é ou não do mesmo cliente por exemplo:

public String getDonoDaConta() {
      return donoDaConta;
    }


@Override
public boolean equalsTo (Object outraConta) {
 if (outraConta== null) {
// um objeto null não é um objeto
      return false;
    }
  if (! (outraConta.getClass() == this.getClass()){
      return false
    }
// Objetos q não seja da mesma classe, não serão comparados
    Object  outraConta = (Conta) outraConta;
// casting em object para q ele seja do tipo conta
   if (outraConta.getDonoDaConta() == this.getDonoDaConta() ) {
     return true;
    }
// por fim se a String do getDonoDaConta em ambas classes é igual, é do mesmo dono.

@Override
public int hashCode() {
    int prime = 17;
    int final = (int) (Math.pow(17, 2))/2;
    final = final * 3 * DonoDaConta.hashCode();
    return final; 
    }