ホームページ >バックエンド開発 >C++ >Java は値渡しですか、それとも参照渡しですか?

Java は値渡しですか、それとも参照渡しですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-31 16:18:10404ブラウズ

Is Java Pass-by-Value or Pass-by-Reference?

Java の値渡しセマンティクスを理解する

Java では、参照型を含むすべてのパラメーターが値によって渡されます。これは、参照自体ではなく、参照の実際の値がメソッドに渡されることを意味します。パラメーターによって参照されるオブジェクトに加えられた変更は元のオブジェクトに反映されるため、参照が参照によって渡されるように見えるため、混乱を招く可能性があります。

ただし、これは真の参照渡しの動作ではありません。 。次の例はこれを示しています。

Object o = "Hello";
mutate(o);
System.out.println(o);

private void mutate(Object o) { o = "Goodbye"; } //NOT THE SAME o!

このコードを実行すると、出力は「Hello」になります。これは、mutate メソッドが元のオブジェクト自体ではなく、元のオブジェクトへの参照のコピーを受け取るためです。 o = "Goodbye" 行が実行されると、mutate メソッド内の参照変数 o が変更されますが、メソッド外の元の変数 o には影響しません。

真の参照渡し動作を実現するには、次のようにします。 1 つのオプションは、次のように明示的な参照を使用することです。

AtomicReference<Object> ref = new AtomicReference<>("Hello");
mutate(ref);
System.out.println(ref.get()); //Goodbye!

private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); }

この場合、AtomicReference ラッパーは元のオブジェクトへの参照を保持します。 mutate メソッドが ref パラメーターを受け取ると、元のオブジェクトに直接アクセスできるようになり、オブジェクトに加えられた変更はメソッドの外にある元のオブジェクトに反映されます。

以上がJava は値渡しですか、それとも参照渡しですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。