使用参考和新的

Set*_*r22 2 java

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

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

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

f = null;
Run Code Online (Sandbox Code Playgroud)

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

ass*_*ias 5

您可以将其f视为包含指向内存中某个对象的值.当您重新分配ff = something,它只是更改f指向的内存中的位置.

但这并不影响f最初指向的对象.

所以在这两种情况下,getFoo()即使你重新分配也会返回旧对象f(假设你的getFoo方法没有改变任何东西,当然是一个简单的getter).

  • @CodeEnthusiastic当然是允许的.它甚至用在语言规范中. (2认同)
  • 你先发了,所以我把它放在这里.我不知道OP是否知道,当没有指向对象的"指针"时,就像`f`重新分配了它的值一样,第一个对象不再有趣或有用,并且不久将被垃圾收集.现在,可能还有其他代码,未显示,将"指针"保存到最初存储为`someOtherObject`的`foo`的对象.但我们不知道这一点. (2认同)