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

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

Компании: ЛИПТ Софт

Стек: Kotlin, Java

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

Да, в Kotlin есть прямой аналог методов equals и hashCode из Java. В Kotlin эти методы уже определены в классе Any (аналог Object в Java), и их поведение по умолчанию такое же: сравнение по ссылке и хеш-код на основе адреса объекта.

Однако Kotlin предлагает более удобный способ - data class. Если объявить класс с модификатором data, компилятор автоматически сгенерирует корректные реализации equals, hashCode, toString, copy и componentN на основе всех свойств, объявленных в первичном конструкторе.

Пример:

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

fun main() {
    val user1 = User("Alice", 30)
    val user2 = User("Alice", 30)
    println(user1 == user2) // true (сравнение по содержимому)
    println(user1.hashCode() == user2.hashCode()) // true
}

Если же вы используете обычный класс (не 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
    }
}

Также стоит помнить, что оператор == в Kotlin транслируется в вызов equals (кроме сравнения с null), а === - это строгое сравнение по ссылке (аналог == в Java).

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

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