Dúvidas com hashCode e equals

4 respostas
B
Galera, tenho o seguinte objeto. Gostaria de diferenciar um objeto de outro através do atributo codFila. Para isso sobrescrevi os métodos equals e hashCode. Porém não está dando certo!!!!
public class StatusAgentesFilasAtualVO 
{
    private String codFila;
    private int nroAgente;
    private int qtdChamAtendidas;
    private int horUltimaChamada;
    private String idtStatus;
    private int statusPausa;

    public String getCodFila() 
    {
        return codFila;
    }

    public void setCodFila(String codFila) 
    {
        this.codFila = codFila;
    }

    [b]....... Outros getters e setters[/b]

    // Verifica se os objetos sao equivalentes
    public boolean equals(Object o)
    {
       if((o instanceof StatusAgentesFilasAtualVO)&&(((StatusAgentesFilasAtualVO)o).getCodFila()==this.codFila))
       {
          return true;
       }
       else
       {
          return false;
       }
    }
    
    public int hashCode () 
    {
         int hash = 0;
         
         if (codFila != null) 
             hash = codFila.hashCode();
         if (nroAgente != 0) 
             hash = hash * 37 + Integer.valueOf(nroAgente).hashCode();
         if (qtdChamAtendidas != 0) 
            hash = hash * 37 + Integer.valueOf(qtdChamAtendidas).hashCode();
         if (horUltimaChamada != 0) 
            hash = hash * 37 + Integer.valueOf(horUltimaChamada).hashCode();
         if (idtStatus != null) 
            hash = hash * 37 + idtStatus.hashCode();
         if (statusPausa != 0) 
            hash = hash * 37 + Integer.valueOf(statusPausa).hashCode();
         
         return hash;
     }

}

4 Respostas

cassio

Dentro do método equals() você está comparando os atributos codFila usando o operador ==. como codFila é uma String, você não está comparando o valor da String, mas sim seu endereço de memória. Você precisa comparar assim:

...
return obj.getcodFila().equals(this.codFila);
P

Lembrando que, por convenção:

Se a.equals(b) == true, então a.hashCode == b.hashCode
Se a.hashCode == b.hashCode, então talvez a.equals(b) == true.

rodrigus

Quebre a linha do IF no método equals, por que não dá para ler tudo.

Paulo_Silveira

pango:
Lembrando que, por convenção:

Se a.equals(b) == true, então a.hashCode == b.hashCode

Isso mesmo. mas nem é convencao, é uma obrigacao sua… contrato da classe Object…

Criado 20 de julho de 2007
Ultima resposta 20 de jul. de 2007
Respostas 4
Participantes 5