Ответ
Data class автоматически генерирует hashCode() на основе всех свойств, объявленных в первичном конструкторе.
Пример:
data class User(val id: Int, val name: String)
val user1 = User(1, "Alice")
val user2 = User(1, "Alice")
println(user1.hashCode() == user2.hashCode()) // true
Особенности:
- Учитываются только свойства конструктора (не var/val в теле класса)
- Порядок свойств важен - разные порядки дадут разные хэши
- Если equals() возвращает true для двух объектов, их hashCode() должен быть одинаковым
- Для nullable-свойств null обрабатывается корректно