Какая разница между полями в конструкторе и в теле data class

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

Ответ

В Kotlin data class позволяет объявлять свойства прямо в конструкторе, что автоматически делает их частью equals(), hashCode(), toString() и методов копирования.

Пример:

data class User(val name: String, val age: Int) // свойства в конструкторе

Здесь name и age участвуют в генерируемых методах.

Если объявить свойство в теле класса:

data class User(val name: String) {
    var age: Int = 0 // не участвует в equals/hashCode/toString
}

age не будет учитываться в стандартных методах data class.

Вывод:

  • Поля в конструкторе — часть контракта data class.
  • Поля в теле — обычные свойства, не влияют на логику data class.