2

このコード行を実行すると、どのような動作が期待されますか?:

Foo f = someOtherObject.getFoo(); //We get a reference of a Foo object from another class
f = new Foo();

someOtherObject.getFoo() は新しいオブジェクトを返すでしょうか、それとも古いオブジェクトを返すでしょうか? また、コードの 2 行目を次のように変更するとどうなりますか?

f = null;

someOtherObjct.getFoo() は null を返しますか、それとも古いオブジェクトを返しますか?

4

6 に答える 6

5

fメモリ内のオブジェクトを指す値が含まれていると考えることができます。で再割り当てfすると、指しf = somethingているメモリ内の場所が変更されるだけです。f

fしかし、それは元々指していたオブジェクトには影響しません。

したがって、どちらの場合も、getFoo()再割り当てしても古いオブジェクトを返します(メソッドが何も変更せず、もちろん単純なゲッターであるとf仮定します)。getFoo

于 2013-08-05T16:58:53.530 に答える
2

に異なる値/オブジェクトを割り当てるとf、単にf異なるメモリ位置を指し示すだけで、指すメモリfは変更されません。

Foo f = someOtherObject.getFoo();

fsomeOtherObject.getFoo() によって返されるオブジェクトを指します (ヒープ上のメモリ位置)

f = new Foo();

f新しいオブジェクト(ヒープ上の別のメモリ位置) を指す

someOtherObject.getFoo() は新しいオブジェクトを返しますか?

いいえ...私たちは変わらなかったのでsomeOtherObject

f = null;

someOtherObject.getFoo() は null を返しますか?

いいえ...私たちは変わらなかったのでsomeOtherObject

于 2013-08-05T17:00:02.340 に答える
1
Foo f = someOtherObject.getFoo(); //Assign f to value returned by getFoo()
f = new Foo();                    //Reassign f to newly constructed Foo object
f = null;                         //Reassign f to null

どちらの場合でも、getFoo()メソッドは何に割り当てたかを気にしませんf

于 2013-08-05T16:59:42.947 に答える
0

f = nullinによって返されるオブジェクトには影響しませんgetFoo()。またはf = new foo()そのことについて。

どちらの場合も、 f が保持している参照を変更しているだけです。

于 2013-08-05T16:58:53.560 に答える
0

どちらの場合も、someOtherObject.getFoo()返される値は影響を受けません。再割り当てすることにより、以前に保持されていた参照ではなく、それ自体を再割り当てしfます。ff

于 2013-08-05T17:00:13.887 に答える
0

f は単なるオブジェクトへのポインターであるため、それが指している場所 (f = 他の何か) を変更しても、以前に指していたオブジェクトは変更されません。

例:(fはあなたが持っているポインタの種類です)

f = existingobject;
f = otherobject;

これが意味するのは、最初に f が を指すということだけexistingobjectです。次の行が実行されると、 f はもはや を指すのではなく、 をexistingobject指すようになりotherobjectます。existingobjectはまったく影響を受けません。

于 2013-08-05T17:01:12.220 に答える