Сравнение объектов data class в Kotlin
В разделе про объекты в коде вы уже видели: у обычного
класса == без equals ведёт себя как ===,
а совпадение полей проверяли вручную. Для data class
оператор == сравнивает значения свойств из
заголовка. Два экземпляра с одинаковыми полями
считаются равными, даже если созданы отдельными
вызовами конструктора:
data class User(val name: String, val age: Int)
fun main() {
val a = User("Ann", 25)
val b = User("Ann", 25)
println(a == b)
println(a === b)
}
Если хотя бы одно поле отличается, результат
== будет false. Оператор
!= даёт противоположный ответ:
data class Point(val x: Int, val y: Int)
fun main() {
val p1 = Point(1, 2)
val p2 = Point(1, 3)
println(p1 != p2)
}
Компилятор генерирует equals
и hashCode по тем же полям. Это важно,
когда объекты кладут в Set или в ключи
Map - дубликаты по содержимому
не размножаются:
data class Tag(val code: String)
fun main() {
val set = setOf(Tag("go"), Tag("go"))
println(set.size)
}
Сделайте data class Item с полями
sku и qty.
Даны два объекта:
val left = Item("A1", 3)
val right = Item("A1", 3)
Выведите на экран true, если объекты
равны по ==, иначе false.
Сделайте data class PairNum с полями
a и b.
Создайте setOf из трёх элементов:
PairNum(1, 2), PairNum(1, 2),
PairNum(2, 1).
Выведите на экран размер полученного множества.