Разница между equals и hashCode в Java

Оглавление:

Разница между equals и hashCode в Java
Разница между equals и hashCode в Java

Видео: Разница между equals и hashCode в Java

Видео: Разница между equals и hashCode в Java
Видео: Java. Методы equals и hashCode. 2024, Июль
Anonim

Ключевая разница - equals и hashCode в Java

Операция equals аналогична оператору==, который проверяет идентичность объекта, а не равенство объектов. HashCode - это метод, с помощью которого класс неявно или явно разбивает данные, хранящиеся в экземпляре класса, на одно хэш-значение, которое представляет собой 32-битное целое число со знаком. Ключевое различие между equals и hashCode в Java заключается в том, что equals используется для сравнения двух объектов, а hashCode используется при хешировании, чтобы решить, к какой группе следует отнести объект.

Что такое equals в Java?

Метод equals используется для сравнения двух объектов. Метод equals по умолчанию определен в классе объектов. Эта реализация аналогична оператору==. Две ссылки на объекты равны, только если они указывают на один и тот же объект. Можно переопределить метод equals.

Разница между equals и hashCode в Java
Разница между equals и hashCode в Java

Рисунок 01: Java-программа с equals

Выражение System.out.println(s1.equals(s2)) даст ответ false, поскольку s1 и s2 ссылаются на два разных объекта. Это было похоже на утверждение System.out.println(s1==s2);

Выражение System.out.println(s1.equals(s3)) даст ответ true, поскольку s1 и s3 относятся к одному и тому же объекту. Это было похоже на утверждение System.out.println(s1==s3);

В классе Student нет метода equals. Поэтому вызывается equals в классе Object. True отображается, только если ссылка на объект указывает на тот же объект.

Разница между equals и hashCode в Java_Рисунок 02
Разница между equals и hashCode в Java_Рисунок 02

Рисунок 02: Java-программа с переопределенным равенством

В соответствии с приведенной выше программой метод equals переопределяется. Объект передается методу, и его тип приводится к Student. Затем проверяются значения идентификатора. Если значения идентификатора похожи, он вернет true. Если нет, он вернет false. Идентификаторы s1 и s2 аналогичны. Таким образом, он будет печатать true. Идентификаторы s1 и s3 также похожи, поэтому будет напечатано true.

Что такое hashCode в Java?

HashCode используется при хешировании, чтобы решить, к какой группе следует отнести объект. Группа объектов может иметь один и тот же хэш-код. Правильная хэш-функция может равномерно распределить объекты по разным группам.

Правильный hashCode может иметь следующие свойства. Предположим, что есть два объекта obj1 и obj2. Если obj1.equals(obj2) истинно, то obj1.hashCode() равен obj2.hashCode(). Если obj1.equals(obj2) ложно, нет необходимости, чтобы obj1.hashCode() не был равен obj2.hashCode(). Два неравных объекта также могут иметь одинаковый hashCode.

Разница между equals и hashCode в Java_Рисунок 03
Разница между equals и hashCode в Java_Рисунок 03

Рисунок 03: Класс Student с equals и hashCode

Ключевая разница между equals и hashCode в Java
Ключевая разница между equals и hashCode в Java

Рисунок 04: Основная программа

Класс Student содержит методы equals и hashCode. Метод equals в классе Student получит объект. Если объект имеет значение null, он вернет false. Если классы объектов не совпадают, он вернет false. Значения id проверяются в обоих объектах. Если они похожи, он вернет true. В противном случае он вернет false.

В основной программе создаются объекты s1 и s2. При вызове s1.equals(s2) будет получено значение true, поскольку метод equals переопределен и проверяет значения идентификаторов двух объектов. Несмотря на то, что они ссылаются на два объекта, ответ верен, потому что значения идентификаторов s1 и s2 одинаковы. Поскольку s1.equals(s2) истинно, хэш-коды s1 и s2 должны быть равны. Печать хэш-кода s1 и s2 дает одно и то же значение. Метод hashCode можно использовать с такими коллекциями, как HashMap.

В чем разница между equals и hashCode в Java?

equals vs hashCode в Java

equals - это метод в Java, который действует аналогично оператору==, который проверяет идентичность объекта, а не равенство объектов. hashCode - это метод, с помощью которого класс неявно или явно разбивает данные, хранящиеся в экземпляре класса, на одно хеш-значение.
Использование
Метод equals используется для сравнения двух объектов. Метод используется при хешировании, чтобы решить, в какую группу следует поместить объект.

Резюме - equals vs hashCode в Java

Разница между equals и hashCode в Java заключается в том, что equals используется для сравнения двух объектов, а hashCode используется при хешировании, чтобы решить, к какой группе следует отнести объект.

Рекомендуемые: