В чем нюанс передачи аргументов в метод в Kotlin

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

Ответ

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

Пример:

fun modifyList(list: MutableList<Int>) {
    list.add(42) // изменяет переданный список
}

fun main() {
    val myList = mutableListOf(1, 2, 3)
    modifyList(myList)
    println(myList) // [1, 2, 3, 42]
}

Нюансы:

  1. Передача val/var не влияет на поведение внутри функции.
  2. Переменная-ссылка копируется, но сам объект остается тем же.
  3. Для примитивов изменение внутри функции не влияет на оригинал.

Если нужно запретить изменение, используйте Immutable коллекции (List вместо MutableList).