hashcode() e
equals são métodos da classe
Object. Como todos os objetos estendem impliciamente Object, eles possuem ambos os métodos. Se
hashcode é sobrescrito, em alguma classe, então
equals também deve ser sobrescrito, para se manter a consistência. Se duas instâncias de variáveis x e y se referem ao mesmo objeto, isto é, se a chamada de
x.equals(y) retorna true, então a chamada de
hashcode() para ambas as instâncias deve retornar o mesmo valor. O Modus Tollens dessa afirmação é que se a chamada de
hashcode() para os dois objetos retorna valores diferentes, então esses dois objetos devem ser distintos, ou seja, a chamada de
x.equals(y) deve retornar false. O método
hashcode() pode ser completamente ineficiente e correto, por exemplo, se ele retorna o mesmo valor para qualquer objeto. O contrato de
equals() especifica que ele deve ser reflexivo, simétrico, transitivo e consistente.