我有两个互相创建实例的类,可能应该创建一个无限循环,但事实并非如此。 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 造成无限循环?
答案 0 :(得分:3)
您只有一个A
实例(如果您在某处编写了new A()
),它拥有9个B
实例,并且每个实例都包含对同一A
实例的引用。
从某种意义上说,这会创建一个循环,A
和B
的内存无法释放,因为它们相互引用。除此之外,没有问题,没有会导致任何重大问题的“无限”循环,尤其是没有无限循环会创建越来越多的对象。
如果你写过
class B {
A a;
B() {
this.a = new A();
}
}
那你就会遇到麻烦。
答案 1 :(得分:2)
不会。。您只是使用
捕获A类对象的引用 this.a = a;
并且不创建新的。