Участвует ли в вычислении equals переменная из тела data class

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

Ответ

В Kotlin при использовании data class метод equals() автоматически генерируется и учитывает только свойства, объявленные в первичном конструкторе. Переменные, объявленные в теле класса (var/val внутри {}), не участвуют в сравнении.

data class Person(val name: String) {
    var age: Int = 0 // Не учитывается в equals/hashCode
}

val p1 = Person("Alice").apply { age = 30 }
val p2 = Person("Alice").apply { age = 40 }
println(p1 == p2) // true, так как сравнивается только name