Eu preciso comparar um objeto de uma classe Pessoa. Estou tentando usar o equals

6 respostas
fly_fly

public boolean equals(Object o) {

boolean x=false;

Pessoa p = (Pessoa) o;

if (p.getIdade()=this.idade) {

if(p.getNome().equals(this.nome)) {

x=true;

}

}

return x;

}

6 Respostas

Guilherme_Gomes

Lembre-se = é diferente de ==

public boolean equals(Object o) {
    Pessoa p = (Pessoa) o;
    if (p.getIdade()==this.idade) 
        if(p.getNome().equals(this.nome)) 
            return true;
    return false;
}

Seria bom verificar se o Object o é instancia de Pessoa com instance of tambem

P

Dentro do if vc não deve usar = e sim ==.

Para fazer a verificação com instanceof ficaria assim:

if (o instanceof Pessoa)

H

Se usar o Eclipse ele gera pra você basta clicar CTRL + D e Generate Equals e HaschCode
:lol:

[]'s

TDS

Correções:

Cuidado caso queria mudar as teclas de atalho vá até Preferences, caso
contrário o default do Eclipse é o seguinte.

CTRL + D é para excluir a linha.
alt+sfhit+s abri uma “janela” dai escolher a opção Generate HaschCode() and Equals.

[]'s

sergiotaborda

hebertaquino:
Se usar o Eclipse ele gera pra você basta clicar CTRL + D e Generate Equals e HaschCode
:lol:

Não use esta funcionalidade. Para uma classe com 2 atributos Obbject a e b ele gerou isto

public int hashCode() {
        final int PRIME = 31;
        int result = 1;
        result = PRIME * result + ((a == null) ? 0 : a.hashCode());
        result = PRIME * result + ((b == null) ? 0 : b.hashCode());
        return result;
    }

    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        final ClassX other = (ClassX) obj;
        if (a == null) {
            if (other.a != null)
                return false;
        } else if (!a.equals(other.a))
            return false;
        if (b == null) {
            if (other.b != null)
                return false;
        } else if (!b.equals(other.b))
            return false;
        return true;
    }

Quando o necessário seria apenas:

public int hashCode(){
        return a.hashCode() ^ b.hashCode();
    }
    
    public boolean equals(Object other){
        return other instanceof ClassX && equals((ClassX)other);
    }
    
    public boolean equals(ClassX other){
        return a.equals(other.a) && b.equals(other.b);
    }

Como estas funções são muito chamadas num map a implementação genérica do Eclipse é overkill (um canhão para matar micróbio)

sergiotaborda

equals não deve dar erro quando o objecto não é da classe pretendia, o seu codigo dá erro de o não é uma Pessoa
eis uma alternativa

public boolean equals(Object other) {
     return other instanceof Pessoas && equals((Pessoa)other);
}

public boolean equals(Pessoa other){
 return this.idade == other.idade && this.nome.equals(other.nome);
}

Sem ifs e muito simples de ler além de que não precisa usar get pode comparar os atributos diretamente.

Criado 12 de setembro de 2007
Ultima resposta 12 de set. de 2007
Respostas 6
Participantes 6