Java Core middle
Что такое Контракт equals/hashCode?
Ответ
Если a.equals(b) == true, то a.hashCode() == b.hashCode(). Обратное необязательно (коллизии допустимы). equals(null) → false. Переопределяешь один — переопределяй оба. Практический пример: положить объект в HashSet — иначе он не найдётся.
Разбор: Контракт односторонний: равные объекты обязаны иметь равные хэши, но равные хэши НЕ обязывают объекты быть равными (коллизии законны). equals(null) всегда false, а переопределять нужно оба метода согласованно. Ловушка дистракторов — попытка сделать связь двусторонней или объявить хэши обязательно уникальными.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.