equals()
equals() compara o conteúdo de um objeto com outro. Comumente chamado de comparação de igualdade, se equals() não for sobrescrito, internamente ele será o mesmo que ==, portanto, uma comparação de identidade. Portanto, se você deseja comparar objetos corretamente, você deve usar equals().
hashCode()
hashCode() verifica se dois objetos são o mesmo objeto. Ele tem a mesma funcionalidade de comparação de identidade que ==, mas o método hashCode() retorna um valor inteiro exclusivo do objeto durante o tempo de execução. Geralmente, retorna o endereço de memória do objeto armazenado no Heap.
Este método tem a palavra-chave native anexada a ele, o que significa que é uma palavra-chave usada quando uma linguagem desenvolvida em uma linguagem diferente de Java é usada em Java.
O que é hash?
Hashing é o processo de usar uma função hash para gerar um valor de saída de tamanho fixo a partir de um valor de entrada de tamanho variável. O valor obtido por meio de hashing é chamado de código hash.
equals() e hashCode()
Como objetos idênticos devem ter o mesmo endereço de memória, é óbvio que objetos idênticos devem ter o mesmo código hash. Portanto, é aconselhável sobrescrever hashCode() junto com equals() para garantir que o mesmo código hash seja gerado.
Estrutura de dados hash
Vamos inserir dois objetos iguais na estrutura de dados HashSet como mostrado acima. Se imprimirmos o tamanho desse conjunto, ele imprimirá 2. Por que isso acontece?
Isso ocorre porque as estruturas de dados que usam hash usam hashCode() para determinar a chave. Em outras palavras, antes de comparar se os objetos são iguais, ele compara se os códigos hash dos dois objetos são iguais e, em seguida, determina se os dois objetos são iguais. Nesse caso, se hashCode() não for sobrescrito, hashCode() de Object será usado, então o endereço de memória onde cada objeto é armazenado será retornado. Portanto, é uma boa prática sobrescrever hashCode() junto com equals() para o caso de usar uma estrutura de dados hash.
Fonte
Perguntas e Respostas Esperadas na Entrevista
Por que equals() e hashCode() são usados juntos?
As estruturas de dados que usam hash usam hashCode() para determinar a chave. Em outras palavras, antes de comparar se os objetos são iguais, ele compara se os códigos hash dos dois objetos são iguais e, em seguida, determina se os dois objetos são iguais. Nesse caso, se hashCode() não for sobrescrito, hashCode() de Object será usado, então o endereço de memória onde cada objeto é armazenado será retornado. Portanto, é uma boa prática sobrescrever hashCode() junto com equals() para o caso de usar uma estrutura de dados hash.
Comentários0