Ответ
В 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.