В чем заключается передача по ссылке

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

Ответ

В Kotlin все аргументы передаются по значению. Однако для объектов передается копия ссылки на объект, что позволяет изменять его состояние внутри функции, но не саму ссылку.

Пример:

fun modifyList(list: MutableList<Int>) {
    list.add(42) // Изменяет состояние переданного объекта
    list = mutableListOf(1, 2) // Не влияет на оригинальную ссылку (ошибка компиляции, если `list` не `var`)
}

val myList = mutableListOf(1, 2)
modifyList(myList)
println(myList) // [1, 2, 42]  

Для примитивов (Int, Boolean и т.д.) передается копия значения, изменения внутри функции не затрагивают оригинал.