Да, person1 == person2 вернёт true. Сгенерированный equals у data class учитывает свойства первичного конструктора; поле age, объявленное в теле класса, не участвует.
Проверка равенства экземпляров data class с изменяемыми полями
Да, 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.