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