Java 关于内部对象和对象的问题(可视化请求)

Java 关于内部对象和对象的问题(可视化请求),java,object,Java,Object,有人能想象这些物体是如何相互作用的吗?这是一个嘲弄我即将举行的OCA考试的问题,即使我确实理解了这个主题,但我仍然很难想象到底发生了什么。我确实发现了当我们到达e2时会发生的错误。e=e1;因为e2已经为空。 我希望我说得够清楚,明白我的问题是什么:)。是不是更像这样: [e1]----------->[e1对象]----------->[e对象] [e2]----------->[e2对象]----------->[e对象] [e3]----------->[e3对象]----------->

有人能想象这些物体是如何相互作用的吗?这是一个嘲弄我即将举行的OCA考试的问题,即使我确实理解了这个主题,但我仍然很难想象到底发生了什么。我确实发现了当我们到达e2时会发生的错误。e=e1;因为e2已经为空。 我希望我说得够清楚,明白我的问题是什么:)。是不是更像这样:

[e1]----------->[e1对象]----------->[e对象]

[e2]----------->[e2对象]----------->[e对象]

[e3]----------->[e3对象]----------->[e对象]

还是更像:

[e1]----------->[e1对象| e对象]

[e2]----------->[e2对象| e对象]

[e3]----------->[e3对象| e对象]

我真的希望我在这里说清楚:D

请告诉我是否可以更具体一些。

代码

class Eco {
    Eco e;

    public static void main(String[] args){
        Eco e1 = new Eco();
        Eco e2 = new Eco();
        Eco e3 = new Eco();

        e3.e = e2;
        e1.e = e3;
        e2 = null;
        e3 = null;
        e2.e = e1;
        e1 = null;
    }

}
提供如下链接
e1.e->e3.e->e2
将e2和e3设为null并不意味着它们有资格进行垃圾收集,因为它们可以通过e1进行竞争。
只有使e1=null,它们才有资格进行垃圾收集。

但是代码在
e2.e=e1处抛出NullpointerException,这是正确的答案。

请努力发布格式良好且易于阅读的代码。让代码变得比现在更难理解是没有意义的。这次我已经为您修改了代码的格式,但是在将来,请您自己再做一次这项轻微但重要的工作。1。谢谢你格式化它!2.我只是从我的嘲弄问题中复制了它,但我应该把Eco e带到顶部,因为它没有什么区别。很抱歉什么是
[e对象]
?您是指
Eco
类的
e
字段吗?这是
Eco
对象的一部分,它本身是对另一个
Eco
对象的引用。
e3.e = e2;
e1.e = e3;