Equals, HashCode - luk6233/interview GitHub Wiki

JavaRush

Метод еquals() используется для сравнения объектов, а hashCode - для генерации целочисленного кода объекта.

Так как HashMap и HashTable в Java полагаются на методы equals() и hashCode() для сравнения своих key и values, то Java предлагает следующие правила для переопределения этих методов:
Рефлексивность: Объект должен равняться себе самому.
Симметричность: если a.equals(b) возвращает true, то b.equals(a) должен тоже вернуть true.
Транзитивность: если a.equals(b) возвращает true и b.equals(c) тоже возвращает true, то c.equals(a) тоже должен возвращать true.
Согласованность: повторный вызов метода equals() должен возвращать одно и тоже значение до тех пор, пока какое-либо значение свойств объекта не будет изменено. То есть, если два объекта равны в Java, то они будут равны пока их свойства остаются неизменными.
Сравнение null: объект должны быть проверен на null. Если объект равен null, то метод должен вернуть false, а не NullPointerException. Например, a.equals(null) должен вернуть false.

Соглашение между equals и hashCode в Java
Если объекты равны по результатам выполнения метода equals, тогда их hashcode должны быть одинаковыми.
Если объекты не равны по результатам выполнения метода equals, тогда их hashcode могут быть как одинаковыми, так и разными. Однако для повышения производительности, лучше, чтобы разные объекты возвращали разные коды.