Ответ
Контракт между equals и hashCode в Java (и Kotlin) требует, что если два объекта равны по equals, то их hashCode должен быть одинаковым. Обратное не обязательно: разные объекты могут иметь одинаковый hashCode.
Нарушение контракта может привести к ошибкам в коллекциях, например, в HashMap или HashSet.
Пример на Kotlin:
data class Person(val name: String, val age: Int) {
override fun hashCode(): Int {
return name.hashCode() + age
}
}
Здесь data class автоматически генерирует корректные equals/hashCode. Если переопределять вручную, нужно соблюдать контракт:
- Если
a == b, тоa.hashCode() == b.hashCode() hashCode()должен возвращать одинаковое значение для неизменяемого объекта
Видео-ответы
▶
▶
▶
▶
▶
▶
▶