ホームページ >バックエンド開発 >C++ >Java はパラメータを参照または値で渡しますか?また、参照のような動作を実現するにはどうすればよいですか?

Java はパラメータを参照または値で渡しますか?また、参照のような動作を実現するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-29 18:44:141037ブラウズ

Does Java Pass Parameters by Reference or by Value, and How Can You Achieve Reference-Like Behavior?

Java での参照によるパラメータの受け渡し: 明確化

一般的な考えに反して、Java は同じ方法でのパラメータの参照による受け渡しをサポートしていません。 C# の ref キーワードとして。ただし、この認識は、参照型パラメータの場合、参照自体が値によって渡されるという事実から生じています。

Java では、すべてのパラメータが値によって渡されます。参照型パラメータがメソッドに渡されると、参照のコピーが作成されます。これは、メソッド内で参照に加えられた変更は、メソッド外の参照には影響しないことを意味します。

これを説明するために、次の例を考えてみましょう。

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

private void mutate(Object o) { o = "Goodbye"; }

上記のコードは " を出力します。こんにちは」とコンソールに伝えます。これは、mutate メソッド内の参照 o がメソッドの外部の参照と同じではないことを示しています。

参照自体を変更したい場合は、次のようにする必要があります。 java.util.concurrent.atomic.AtomicReference などの明示的な参照型パラメータを使用します。以下に例を示します。

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

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

この場合、ref パラメーターは参照によって渡され、参照の値は mutate メソッド内で変更されます。その結果、コードは「Goodbye!」を出力します。コンソールへ。

以上がJava はパラメータを参照または値で渡しますか?また、参照のような動作を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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