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

Да, person1 == person2 вернёт true. Сгенерированный equals у data class учитывает свойства первичного конструктора; поле age, объявленное в теле класса, не участвует.

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

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

Да, person1 == person2 вернёт true. Сгенерированный equals у data class учитывает свойства первичного конструктора; поле age, объявленное в теле класса, не участвует.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо определить, будут ли два объекта класса Person, объявленного как data class и созданного с одинаковыми значениями свойства name, считаться равными при сравнении person1 == person2, если после создания их изменяемое поле age получило разные значения.


data class Person(val name: String) {
    var age: Int = 0
}

val person1 = Person("John")
val person2 = Person("John")
person1.age = 10
person2.age = 20

Ответ

Да, person1 == person2 вернёт true. Сгенерированный equals у data class учитывает свойства первичного конструктора; поле age, объявленное в теле класса, не участвует.

Оба объекта имеют name = John, поэтому изменение age на 10 и 20 не влияет на структурное равенство. При этом person1 === person2 будет false: это разные экземпляры. Если возраст должен участвовать в равенстве и hashCode, его нужно включить в первичный конструктор либо явно реализовать соответствующие методы.

Источник: kotlinlang.org.

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

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

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

Подробнее