Übergabe nach Wert oder nach Referenz in Kotlin: Warum kann ich eine Zahl in einer Funktion nicht ändern?
Hallo zusammen! Ich habe gerade angefangen, Kotlin nach Java zu lernen, und bin verwirrt über den Mechanismus der Argumentübergabe an Funktionen. Ich habe mehrere Artikel gelesen, aber nicht ganz verstanden.
Hier ist ein einfaches Beispiel. Ich schreibe eine Funktion, die eine übergebene Zahl um 10 erhöhen soll:
```kotlin
fun increaseValue(x: Int) {
x = x + 10 // Compiler-Fehler: Val cannot be reassigned
}
```
Der Compiler beschwert sich, dass x ein val ist. Ich verstehe, dass Parameter in Kotlin unveränderliche Referenzen (val) sind. Aber wie funktioniert dann die Übergabe für veränderliche Objekte? Hier ist ein weiteres Beispiel:
```kotlin
data class Person(var name: String)
fun changeName(person: Person) {
person.name = "New Name" // Das funktioniert
}
fun main() {
val p = Person("Old")
changeName(p)
println(p.name) // Gibt "New Name" aus
}
```
Hier kann ich das Feld des Objekts ändern. Bedeutet das, dass für primitive Typen eine Übergabe nach Wert und für Objekte nach Referenz erfolgt? Aber wenn ich versuche, das Objekt selbst innerhalb der Funktion zu ersetzen:
```kotlin
fun replacePerso