不应该 类 让彼此的实例形成无限循环
Shouldn't having classes having instances of each other form an 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;
}
}
我的问题:为什么这段代码 不是 造成无限循环?
不会.. 你只是用
捕获了ClassA对象的引用
this.a = a;
而不是创建一个新的。
您只有一个 A
实例(如果您在某处写 new A()
),其中包含 9 个 B
实例,并且每个实例都包含对相同 A
的引用实例.
这会创建一个循环,因为 A
和 B
的内存无法释放,因为它们相互引用。除此之外没有问题,没有 "infinite" 循环会导致任何重大问题,特别是没有无限循环创建越来越多的对象。
如果你写了
class B {
A a;
B() {
this.a = new A();
}
}
那你就麻烦了。
我有两个 类 相互创建实例,这可能会创建一个无限循环,但它们不是。 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;
}
}
我的问题:为什么这段代码 不是 造成无限循环?
不会.. 你只是用
捕获了ClassA对象的引用 this.a = a;
而不是创建一个新的。
您只有一个 A
实例(如果您在某处写 new A()
),其中包含 9 个 B
实例,并且每个实例都包含对相同 A
的引用实例.
这会创建一个循环,因为 A
和 B
的内存无法释放,因为它们相互引用。除此之外没有问题,没有 "infinite" 循环会导致任何重大问题,特别是没有无限循环创建越来越多的对象。
如果你写了
class B {
A a;
B() {
this.a = new A();
}
}
那你就麻烦了。