不应让具有彼此实例的类形成无限循环

时间:2019-05-24 11:26:01

标签: java infinite-loop

我有两个互相创建实例的类,可能应该创建一个无限循环,但事实并非如此。 class A首先创建。

class A {

    B[] b = new B[9];

    A() {
        for (each) { // pseudo code
            b[each] = new B(this);
        }
    } 
}
class B {

    A a;

    B(A a) {
        this.a = a;
    } 
}

我的问题:为什么此代码 NOT 造成无限循环?

2 个答案:

答案 0 :(得分:3)

您只有一个A实例(如果您在某处编写了new A()),它拥有9个B实例,并且每个实例都包含对同一A实例的引用。

从某种意义上说,这会创建一个循环,AB的内存无法释放,因为它们相互引用。除此之外,没有问题,没有会导致任何重大问题的“无限”循环,尤其是没有无限循环会创建越来越多的对象。

如果你写过

class B {

    A a;

    B() {
        this.a = new A();
    } 
}

那你就会遇到麻烦。

答案 1 :(得分:2)

不会。。您只是使用

捕获A类对象的引用
    this.a = a;

并且不创建新的。