Sobes.tech
Back to questions
Junior — Middle
79

В методе hashCode применяется поле, объявленное внутри data class?

Companies where asked
WildberriesWildberries

Answer from AI

sobes.tech AI

В Kotlin, для data class компилятор автоматически генерирует методы hashCode(), equals(), toString(), а также copy() и компоненты для деструктуризации. Метод hashCode() основывается на всех свойствах, объявленных в первичном конструкторе data class (то есть на тех, что указаны после имени класса).

Если внутри data class объявлено дополнительное поле вне первичного конструктора, оно не участвует в вычислении hashCode() и equals(). Это связано с тем, что эти методы учитывают только свойства, объявленные в конструкторе, чтобы обеспечить корректное сравнение и хеширование объектов по основным данным.

Пример:

data class User(val id: Int, val name: String) {
    var age: Int = 0 // не участвует в hashCode и equals
}

fun main() {
    val user1 = User(1, "Alice")
    val user2 = User(1, "Alice")
    user1.age = 25
    user2.age = 30
    println(user1 == user2) // true, так как age не учитывается
    println(user1.hashCode() == user2.hashCode()) // true
}