o primeiro metodo
public void equals(Object objecto){
//recebe qualquer objeto
if(object instanceof Devel){
//e compara se esse objeto e uma instancia
//da classe Devel
}
}
O segundo
public int hashCode(){
return nome.hashcode();
//retorna o codego de hash do objecto
//um codego unico para ser usado em pesquisas
//encontrar o objeto;
}
O equals é um método que compara se um objeto é igual a outro. Se você não sobrescrever, é usada a implementação padrão de Object, que é “um objeto é igual a outro caso seja a mesma instância na memória”. Caso precise de uma comparação mais detalhada, você deve sobrescrever o método a seu modo (por exemplo, dois objetos pessoas são iguais se tiverem o mesmo cpf). Lembrando que a relação de igualdade deve ser reflexiva, simétrica e transitiva.
O hashCode é um método que retorna um código hash de um objeto. Sempre que sobrescrever o equals, sobrescreva também o hashCode. Ele é usado normalmente para agilar a busca em collections.
Obrigado pela ajuda, uma duvida que eu tive quanto ao codigo que eu estava analisando é pq Devel naum era uma classe e sim uma interface, ou seja, a gente naum instancia a interface, por isso fiquei meio confuso com o instanceof, quanto ao hashcode, ficou mais esclarecido, mas ainda naum tenho clareza quanto a relação entre os dois, José, vou ler o seu artigo,
Pessoal, tenho dúvidas também em relação ao método equals, alguém poderia me dar um exemplo de como fazer uma comparação entre dois valores inteiros de Arrays distintos, utilizando esse método?
Só complementando, essa obrigação existe porque a função de hashcode deve retornar valores iguais para objetos iguais (é para isso que ela serve).
Ou seja se:
a.equals(b);
Então
a.hashCode() == b.hashCode()
Note que o contrário pode não ser verdadeiro. Dois objetos de hashCode iguais não necessariamente são iguais, embora, numa boa função de hash isso será muito provável.
Quanto ao equals… testar com instanceOf pode quebrar uma das premissas do equals que diz:
Se a.equals(b) então b.equals(a)
Portanto, isso recai numa implementação errada. Deixo como lição de casa para você achar um caso onde usando instanceof essa propriedade não valha.
Se você quiser que duas contas sejam consideradas iguais se possuem mesmo dono e mesmo saldo (acho que o mais correto seria verificar pelo número da conta + número da agência + nome do banco), basta fazer um método que verifique essas condições, ou sobrescreva o equals.