Ответ
В 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 и т.д.) передается копия значения, изменения внутри функции не затрагивают оригинал.