Всегда ли переменная созданная с помощью val возвращает одно и то же значение

«Всегда ли переменная созданная с помощью val возвращает одно и то же значение» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, val гарантирует только неизменяемость ссылки (нельзя переназначить), но не самого значения. Если объект изменяемый (MutableList, var-поля в классе), его содержимое можно менять.

Пример:

val list = mutableListOf(1, 2, 3)
list.add(4)  // ОК: list теперь [1, 2, 3, 4]
// list = mutableListOf()  // Ошибка: val нельзя переназначить

Для полной неизменяемости используйте неизменяемые типы (List, data class с val-полями).