Java はオブジェクトを値で渡しますか?それとも参照で渡しますか?

DDD
リリース: 2024-11-16 16:17:02
オリジナル
363 人が閲覧しました

Does Java Pass Objects by Value or by Reference?

Java の「値渡し」と「参照渡し」の区別

Java では、変数はオブジェクトではなくオブジェクトへの参照を格納します。彼ら自身。この区別は、オブジェクトがメソッドに引数として渡される方法に影響します。

シナリオ A: 参照を渡す

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

Foo myFoo;
myFoo = createFoo();

public Foo createFoo() {
   Foo foo = new Foo();
   return foo;
}
ログイン後にコピー

myFoo に createFoo() の結果が代入されると、新しい Foo オブジェクトが作成され、foo に代入されます。参照変数 myFoo はこの新しいオブジェクトを指すようになりました。その後 myFoo が変更されると、その変更は元の Foo オブジェクトに影響します。ただし、新しい参照変数が myFoo に割り当てられる場合、その変数は別のオブジェクトを指します。

シナリオ B: 値の受け渡し

これを次と比較してください。

Foo myFoo;
createFoo(myFoo);

public void createFoo(Foo foo) {
   Foo f = new Foo();
   foo = f;
}
ログイン後にコピー

この場合、メソッド createFoo() は myFoo への参照を受け取ります。ただし、メソッド内では、新しい Foo オブジェクトが作成され、ローカル参照変数 f に割り当てられます。 foo = f 行はメソッド内の参照のみを変更し、呼び出し側メソッドに格納されている参照は変更しません。したがって、メソッド内で foo に加えられた変更は、元の Foo オブジェクトには反映されません。

結論

これらの例に基づくと、Java が常にパスすることは明らかです。参照ではなく値による引数。渡される値はオブジェクトへの参照であり、オブジェクト自体ではありません。したがって、メソッド内の参照変数に加えられた変更は、元のオブジェクトには影響しません。ただし、参照を通じてオブジェクト自体に加えられた変更は、元のオブジェクトに反映されます。

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

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