Java での参照によるパラメータの受け渡し
Java では、すべてのパラメータは値によって渡されます。これは、特に次のような場合には直観に反しているように思えるかもしれません。参照渡しをサポートする C# などの言語から来ています。ただし、内部のセマンティクスは若干異なります。
Java による参照型の処理方法
参照型のパラメータ (オブジェクトなど) の場合、Java は参照を渡します。価値そのものです。したがって、メソッド内の代入がメソッド外の参照に影響を与えるため、参照渡しであるように見えます。
ただし、渡される参照は、メソッド内で使用される参照と同じではないことに注意することが重要です。メソッドの呼び出し。
値渡しの証明
次を考慮してください。例:
Object o = "Hello"; mutate(o); System.out.println(o); private void mutate(Object o) { o = "Goodbye"; } //NOT THE SAME o!
このコードは、mutate() メソッドが o 参照を「Goodbye」に変更しようとしても、コンソールに「Hello」を出力します。これは、mutate() に渡される参照が元の o 参照と同じではなく、値渡しのセマンティクスをサポートしていることを示しています。
真の参照渡しのオプション
真の参照渡しの動作を実現するには、次のアプローチを使用できます。
AtomicReference<Object> ref = new AtomicReference<Object>("Hello"); mutate(ref); System.out.println(ref.get()); //Goodbye! private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); }
この場合、 AtomicReference はオブジェクトのラッパーを提供し、その参照は実際に値によって渡されます。 mutate() 内の参照への代入はメソッドの外側の参照に影響を与え、その結果、望ましい参照渡しの動作が実現されます。
以上がJava はパラメータを参照によって渡しますか?それとも値によって渡しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。