[解決済み] 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)
}
関数に渡された参照を使用して、実際のオブジェクトを変更することができます。
関連
-
[解決済み] Kotlin 三項条件演算子
-
[解決済み] Kotlinのvarとvalの違いは何ですか?
-
[解決済み】KotlinでJavaの静的メソッドに相当するものは何ですか?
-
[解決済み】デフォルトのインターフェースメソッドはAndroid 7.0(Nougat)からしかサポートされません。)
-
[解決済み】JavaからKotlinの拡張関数にアクセスする
-
[解決済み] Kotlinで、nullableな値を扱う慣用的な方法、参照または変換する方法は何ですか?
-
[解決済み] KotlinでBuilderパターンを実装するには?
-
[解決済み] KotlinでStringをLongに変換する方法は?
-
[解決済み] AndroidでKotlinを使ってParcelableデータクラスを作成する便利な方法はありますか?
-
[解決済み】Kotlinの標準ライブラリで利用できるJava 8 Stream.collectに相当するものは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Swiftの「if let」文がKotlinで同等であること
-
[解決済み] Kotlin : インタフェース Queue のコンストラクタがない。
-
[解決済み] Kotlinのメンバー宣言に期待する
-
[解決済み】Kotlin : パブリック get プライベート set var
-
[解決済み] Kotlin の単一感嘆符
-
[解決済み] Kotlinでログを取るための慣用的な方法
-
[解決済み] Kotlinの複数変数let
-
[解決済み] Kotlinのトライウィズリソース
-
[解決済み] Kotlinでリソースからテキストファイルを読み込むには?
-
[解決済み] Kotlinでhashmapを繰り返し処理するには?