> Есть ли в 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).
> Похожие задачи по mobile
Что такое extension функции в Kotlin и как их использовать
Что такое nullable типы в Kotlin и как с ними работать
Что такое Kotlin Coroutines
Какие коллекции существуют в Kotlin и каковы их особенности
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью