在练习考试中,我遇到了一个类似这样的问题:
Deer steve = new Deer();
Deer mike = new Deer();
steve = mike;
mike = null;
steve.eatGrass();
当我运行它时,它只是运行该方法,但是如果该对象在技术上现在为空,它如何能够运行该方法?
答案 0 :(得分:1)
不要将对象与变量和引用混淆。
在
Deer steve = new Deer();
steve
是变量。 new Deer()
创建Deer
对象并向其返回引用。该引用的值存储在变量 steve
中。
然后你做
steve = mike;
您将[{1}}中存储的值的副本存储在mike
中。
然后你做
steve
将mike = null;
参考值存储在变量null
中。这不会影响mike
的价值。
答案 1 :(得分:0)
没有。这些只是参考。通过使 mike 为null,您不会使对象无效/销毁/删除。你只是将参考点指向任何东西。该对象仍可以从 steve 引用中引用。但是, steve 指向的原始对象已消失,因为当前没有引用变量指向它。