执行此行代码的预期行为是什么?

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


someOtherObject.getFoo()将返回新对象还是旧对象?如果我们使用以下代码更改第二行代码,该怎么办?

f = null;


someOtherObjct.getFoo()将返回null还是旧对象?

最佳答案

当为f分配不同的值/对象时,只需让f指向不同的内存位置,f指向的内存就不会更改。

Foo f = someOtherObject.getFoo();


f指向someOtherObject.getFoo()返回的对象(堆上的某些内存位置)

f = new Foo();


f指向一个新对象(堆上的另一个内存位置)

someOtherObject.getFoo()是否会返回新对象?

不,因为我们没有更改someOtherObject

f = null;


someOtherObject.getFoo()是否会返回null?

不,因为我们没有更改someOtherObject

09-30 23:34