Dúvidas com hashCode e equals

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!!!

[code]
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;
 }

}[/code]

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);

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.

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

[quote=pango]Lembrando que, por convenção:

Se a.equals(b) == true, então a.hashCode == b.hashCode
[/quote]

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