Выбор ответа Junior Основы языка спрашивают часто обновлено

val и изменяемый список в Kotlin

Вопрос

Что произойдёт при компиляции и запуске кода?

val items = mutableListOf(1)
items.add(2)

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

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

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

Коротко

Правильный ответ: Код скомпилируется, список станет [1, 2]. val запрещает только переприсвоить ссылку items = ....

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

  1. Ошибка компиляции во второй строке: val нельзя менять
  2. Исключение UnsupportedOperationException при add
  3. Создастся копия списка, исходный останется [1]
  4. Код скомпилируется, список станет [1, 2]правильный ответ

Разбор

val запрещает только переприсвоить ссылку items = .... Сам объект MutableList остаётся изменяемым, поэтому add работает. Ошибка компиляции была бы при items = mutableListOf(). UnsupportedOperationException бросает неизменяемая реализация (например, Collections.unmodifiableList), а копирования при add в Kotlin не бывает.

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

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

Термины по теме