❓ Какой контракт связывает equals() и hashCode()?
Контракт: если два объекта равны по equals(), их hashCode() обязан быть одинаков. Обратное не требуется — равные хеши не означают равенство объектов (коллизии допустимы).
Если переопределить equals() и забыть про hashCode(), объект сломается в HashMap/HashSet: положили объект по одному хешу, ищем по другому, и не находим, хотя по equals() он равен.
Дополнительно equals() должен быть рефлексивным, симметричным, транзитивным и согласованным (не меняться без изменения полей).
🐸 Библиотека собеса по Java
#core
Post #1366
1.04K
- 👍 6
- ❤ 2
- 🔥 1