Avatar ·

Kotlin中的值传递与引用传递:为什么我无法在函数中修改数字?

大家好!我刚开始从Java学习Kotlin,对函数参数的传递机制感到困惑。我读了几篇文章,但还是没有完全理解。 这是一个简单的例子。我写了一个函数,应该将传入的数字增加10: ```kotlin fun increaseValue(x: Int) { x = x + 10 // 编译错误:Val cannot be reassigned } ``` 编译器报错说x是val。我知道Kotlin中的参数是不可变引用(val)。但对于可变对象,传递是如何工作的呢?下面是另一个例子: ```kotlin data class Person(var name: String) fun changeName(person: Person) { person.name = "New Name" // 这可以工作 } fun main() { val p = Person("Old") changeName(p) println(p.name) // 输出 "New Name" } ``` 这里我可以修改对象的字段。这是否意味着对于基本类型是值传递,而对于对象是引用传递?但如果我尝试在函数内部替换对象本身: ```kotlin fun replacePerso