Key Difference – equals vs hashCode em Java
O igual é semelhante ao operador==, que é para testar a identidade do objeto em vez da igualdade do objeto. O hashCode é um método pelo qual uma classe divide implícita ou explicitamente os dados armazenados em uma instância da classe em um único valor de hash, que é um inteiro assinado de 32 bits. A principal diferença entre equals e hashCode em Java é que o equals é usado para comparar dois objetos enquanto o hashCode é usado em hashing para decidir em qual grupo um objeto deve ser categorizado.
O que é igual em Java?
O método equals é usado para comparar dois objetos. O método equals padrão é definido na classe de objeto. Essa implementação é semelhante ao operador==. As duas referências de objeto são iguais somente se estiverem apontando para o mesmo objeto. É possível substituir o método equals.
Figura 01: Programa Java com equals
A instrução System.out.println(s1.equals(s2)) dará a resposta false porque s1 e s2 estão se referindo a dois objetos diferentes. Era semelhante à instrução System.out.println(s1==s2);
A declaração System.out.println(s1.equals(s3)) dará a resposta true porque s1 e s3 estão se referindo ao mesmo objeto. Era semelhante à instrução System.out.println(s1==s3);
Não existe método igual na classe Aluno. Portanto, o equals na classe Object é chamado. True é exibido apenas se a referência do objeto estiver apontando para o mesmo objeto.
Figura 02: Programa Java com Overridden equals
De acordo com o programa acima, o método equals é substituído. Um objeto é passado para o método e seu tipo é convertido para Student. Em seguida, os valores de id são verificados. Se os valores de id forem semelhantes, retornará true. Caso contrário, retornará false. Os ids de s1 e s2 são semelhantes. Então, ele imprimirá true. Os ids de s1 e s3 também são semelhantes, então será impresso true.
O que é hashCode em Java?
O hashCode é usado em hashing para decidir em qual grupo um objeto deve ser categorizado. Um grupo de objetos pode compartilhar o mesmo hashCode. Uma função de hash correta pode distribuir objetos uniformemente em diferentes grupos.
Um hashCode correto pode ter propriedades como segue. Suponha que existam dois objetos como obj1 e obj2. Se obj1.equals(obj2) for verdadeiro, então obj1.hashCode() é igual a obj2.hashCode(). Se obj1.equals(obj2) for falso, não é necessário que obj1.hashCode() não seja igual a obj2.hashCode(). Os dois objetos desiguais também podem ter o mesmo hashCode.
Figura 03: Turma do aluno com equals e hashCode
Figura 04: Programa Principal
A classe Student contém os métodos equals e hashCode. O método equals na classe Student receberá um objeto. Se o objeto for null, ele retornará false. Se as classes dos objetos não forem iguais, retornará false. Os valores de id são verificados em ambos os objetos. Se forem semelhantes, retornará true. Caso contrário, retornará false.
No programa principal, os objetos s1 e s2 são criados. Ao chamar s1.equals(s2) dará true porque o método equals é substituído e verifica os valores de id dos dois objetos. Mesmo que eles estejam se referindo a dois objetos, a resposta é verdadeira porque os valores de id de s1 e s2 são os mesmos. Como s1.equals(s2) é verdadeiro, o hashCode de s1 e s2 deve ser igual. Imprimir o hashCode de s1 e s2 dá o mesmo valor. O método hashCode pode ser usado com coleções como HashMap.
Qual é a diferença entre equals e hashCode em Java?
equals vs hashCode em Java |
|
equals é um método em Java que atua de forma semelhante ao operador==, que é testar a identidade do objeto em vez da igualdade do objeto. | hashCode é um método pelo qual uma classe decompõe implícita ou explicitamente os dados armazenados em uma instância da classe em um único valor de hash. |
Uso | |
O método equals é usado para comparar dois objetos. | O método é usado em hashing para decidir em qual grupo um objeto deve ser colocado. |
Resumo – igual vs hashCode em Java
A diferença entre equals e hashCode em Java é que o equals é usado para comparar dois objetos enquanto o hashCode é usado em hashing para decidir em qual grupo um objeto deve ser categorizado.