Проверка равенства экземпляров data‑класса

personA == personB вернёт true: учитывается одинаковое name из первичного конструктора, а age из тела класса не входит в сгенерированный equals.

Короткий ответ

Что ответить на собеседовании

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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее