Ответ
В Java (и Kotlin) передача по значению означает, что при передаче аргумента в метод копируется его значение, а не сам объект. Для примитивных типов (int, float и т.д.) копируется само значение. Для объектов копируется ссылка на объект, но не сам объект.
Пример:
fun modifyPrimitive(value: Int) {
value = 10 // Ошибка: val cannot be reassigned
}
fun modifyObject(list: MutableList<Int>) {
list.add(42) // Изменит оригинальный список
list = mutableListOf(1, 2, 3) // Не повлияет на оригинал
}
val num = 5
modifyPrimitive(num) // num останется 5
val myList = mutableListOf<Int>()
modifyObject(myList) // myList теперь содержит 42