> Есть ли в Kotlin аналог equals и hashCode и как это реализовано (Java)

Уровень: senior · Роль: backend · Язык: Java · Категория: Технические вопросы

Стек: Kotlin, Java

> Пример ответа

Да, в Kotlin есть аналог методов equals и hashCode из Java, и он реализован через ключевое слово data class. Когда вы объявляете класс как data class, компилятор автоматически генерирует для него equals(), hashCode(), toString(), copy() и компонентные функции (componentN()).

Например:

data class Person(val name: String, val age: Int)

Для этого класса equals сравнивает все свойства, объявленные в первичном конструкторе (в данном случае name и age), а hashCode вычисляет хеш на основе тех же свойств. Это эквивалентно ручной реализации в Java, но без boilerplate-кода.

Если вы используете обычный класс (не data class), то можете переопределить equals и hashCode вручную, как в Java, но с синтаксисом Kotlin:

class Person(val name: String, val age: Int) {
    override fun equals(other: Any?): Boolean {
        if (this === other) return true
        if (other !is Person) return false
        return name == other.name && age == other.age
    }

    override fun hashCode(): Int {
        var result = name.hashCode()
        result = 31 * result + age
        return result
    }
}

Однако data class - это рекомендуемый идиоматический способ, так как он гарантирует согласованность между equals и hashCode и автоматически обновляется при изменении свойств.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью