1. ホーム
  2. kotlin

[解決済み] Kotlinは「値渡し」なのか「参照渡し」なのか?

2022-02-24 07:01:34

質問

Javaはパス・バイ・バリューであることは知っています。 この記事 . 私はJavaの出身ですが、Kotlinは値の受け渡しに何を使っているのでしょうか。例えば 拡張機能 または メソッド などです。

解決方法は?

Javaと同じ原理を使用しています。それは、常に パス・バイ・バリュー ということは、コピーが渡されることを想像してください。については プリミティブ型 は、例えば Int このような引数の値は関数に渡され、外側の変数は変更されないことは明らかです。Kotlinのパラメータは以下のように動作するため、再代入できないことに注意してください。 val s:

fun takeInt(a: Int) {
    a = 5
}

このコードがコンパイルされないのは a は再割り当てできません。

オブジェクトの場合は、少し難しいですが、call-by-valueでもあります。オブジェクトを使って関数を呼び出すと、その関数の中にそのオブジェクトの参照のコピーが渡されます。

data class SomeObj(var x: Int = 0)

fun takeObject(o: SomeObj) {
    o.x = 1
}

fun main(args: Array<String>) {
    val obj = SomeObj()
    takeObject(obj)
    println("obj after call: $obj") // SomeObj(x=1)
}

関数に渡された参照を使用して、実際のオブジェクトを変更することができます。