personA == personB вернёт true: учитывается одинаковое name из первичного конструктора, а age из тела класса не входит в сгенерированный equals.
Проверка равенства экземпляров data‑класса
personA == personB вернёт true: учитывается одинаковое name из первичного конструктора, а age из тела класса не входит в сгенерированный equals.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Нужно рассмотреть, будут ли два объекта одного data‑класса считаться равными после изменения их изменяемого свойства.
data class Person(val name: String) {
var age: Int = 0
}
val personA = Person("John")
val personB = Person("John")
personA.age = 10
personB.age = 20
Вопрос: будет ли personA равен personB?
Ответ
personA == personB вернёт true: учитывается одинаковое name из первичного конструктора, а age из тела класса не входит в сгенерированный equals.
Изменение age не меняет результат такого сравнения. Ссылочное равенство через === будет false, поскольку объекты созданы отдельно. Для учёта возраста перенесите его в первичный конструктор либо явно определите равенство и согласованный hashCode.
Источник: kotlinlang.org.