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 サイトの他の関連記事を参照してください。