Что будет делать data class при вычислении hashCode

«Что будет делать data class при вычислении hashCode» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Особенности:

  1. Учитываются только свойства конструктора (не var/val в теле класса)
  2. Порядок свойств важен - разные порядки дадут разные хэши
  3. Если equals() возвращает true для двух объектов, их hashCode() должен быть одинаковым
  4. Для nullable-свойств null обрабатывается корректно