ホームページ > バックエンド開発 > C++ > Java のパラメータ受け渡しは本当に値渡しなのでしょうか、それとももっとニュアンスのあるものなのでしょうか?

Java のパラメータ受け渡しは本当に値渡しなのでしょうか、それとももっとニュアンスのあるものなのでしょうか?

Susan Sarandon
リリース: 2025-01-02 22:04:40
オリジナル
583 人が閲覧しました

Is Java's Parameter Passing Truly Pass-by-Value, or is it More Nuanced?

Java パラメータの受け渡し: 値と参照

Java では、パラメータ受け渡しのセマンティクスが C# などの言語とは異なります。参照の受け渡しを明示的に示します。

参照を囲む混乱

を渡す Java の「値渡し」の性質により、開発者は混乱します。これは、参照型 (オブジェクトなど) のパラメーターが実際には参照によって渡されるためです。ただし、この「参照」は単にオブジェクトのメモリ位置であり、オブジェクト自体ではありません。

値の受け渡しのデモ

次のコード スニペットを考えてみましょう:

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

private void mutate(Object o) { o = "Goodbye"; }
ログイン後にコピー

mutate メソッドの "o" パラメータが実際に参照しているため、このコードはコンソールに "Hello" を出力します。オリジナルのリファレンスのコピー。このコピーに新しい値を割り当てても、元のオブジェクトの値には影響しません。

参照変更の代替オプション

元のオブジェクトを変更するには、次の 2 つのオプションがあります。

  • 明示的な参照: 次のような参照ラッパー クラスを使用します。以下に示す 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"); }
ログイン後にコピー
  • Getter/Setter メソッド: 一般に、オブジェクトのプロパティを変更するには getter メソッドと setter メソッドを使用することをお勧めします。直接修正参照の代わりに。これにより、カプセル化と正確さが保証されます。

以上がJava のパラメータ受け渡しは本当に値渡しなのでしょうか、それとももっとニュアンスのあるものなのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート