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

Поверхностное копирование в data class copy

Вопрос

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

data class Box(val tags: MutableList<Int>)

val a = Box(mutableListOf(1))
val b = a.copy()
b.tags.add(2)
println(a.tags)

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

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

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

Коротко

Правильный ответ: [1, 2]. copy создаёт новый объект, но переносит в него ссылки на те же значения, копия поверхностная.

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

  1. [1, 2]правильный ответ
  2. [1]
  3. []
  4. Ошибка компиляции: copy недоступен для MutableList

Разбор

copy создаёт новый объект, но переносит в него ссылки на те же значения, копия поверхностная. Список у a и b один и тот же, поэтому изменение через b видно через a. Защита: хранить в data class неизменяемые List и создавать новый список при изменении (copy(tags = tags + 2)).

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

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