Выбор ответа Middle Классы, data и sealed обновлено

Свойство в теле data class и equals

Вопрос

Что выведет код?

data class Item(val id: Int) {
    var cached: String = ""
}

val a = Item(1).apply { cached = "x" }
val b = Item(1).apply { cached = "y" }
println(a == b)

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: true. equals у data class учитывает только свойства первичного конструктора, здесь это id.

Варианты ответа

  1. trueправильный ответ
  2. false
  3. Ошибка компиляции: в data class нельзя объявлять свойства в теле
  4. Зависит от порядка создания объектов

Разбор

equals у data class учитывает только свойства первичного конструктора, здесь это id. Поле cached объявлено в теле и в сравнении не участвует, поэтому объекты равны. Объявлять свойства в теле можно. Иногда это используют специально, чтобы исключить поле из equals, но чаще это сюрприз на ревью.

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

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