Что выведет код Junior Классы, data и sealed обновлено

data class: equals, copy и деструктуризация

Вопрос

Что выведет код? По строке на каждый вывод.

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

fun main() {
    val u = User("Ann", 30)
    val older = u.copy(age = 31)
    println(u)
    println(u == User("Ann", 30))
    println(u === User("Ann", 30))
    val (name, age) = older
    println("$name $age")
    println(setOf(u, User("Ann", 30), older).size)
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: User(name=Ann, age=30), true, false, Ann 31, 2. toString у data class печатает имя класса и поля. == сравнивает содержимое, === ссылки, а это разные объекты. copy(age = 31) создаёт новый объект с изменённым полем, деструктуризация берёт component1() и component2().

Что выведет

User(name=Ann, age=30)
true
false
Ann 31
2

Разбор

toString у data class печатает имя класса и поля. == сравнивает содержимое, === ссылки, а это разные объекты. copy(age = 31) создаёт новый объект с изменённым полем, деструктуризация берёт component1() и component2(). В множестве два одинаковых по equals пользователя схлопываются, остаётся 2 элемента.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.