Встречается на собеседованиях • сегодня

Почему объекты по equals могут быть не равны при равных hashCode

В Java equals() и hashCode() должны быть согласованы: если объекты равны по equals(), их hashCode() должен быть одинаковым. Однако обратное неверно - равные hashCode() не гарантируют равенство по equals() (коллизия хэшей).

Пример:

java
String a = "FB";
String b = "Ea";
System.out.println(a.hashCode() == b.hashCode()); // true (коллизия)
System.out.println(a.equals(b)); // false

Причины:

  1. Коллизии хэш-функции - разные объекты могут иметь одинаковый хэш
  2. Некорректная реализация hashCode() (например, константа для всех объектов)
  3. Изменение состояния объекта после добавления в хэш-коллекцию
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы