Разве классы, имеющие экземпляры друг друга, не должны образовывать бесконечный цикл - PullRequest
0 голосов
/ 24 мая 2019

У меня есть два класса, которые создают экземпляры друг друга, что, вероятно, должно создать бесконечный цикл, но это не так.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;
    } 
}

Мой вопрос: почему этот код НЕ делает бесконечный цикл?

Ответы [ 2 ]

3 голосов
/ 24 мая 2019

У вас есть только один экземпляр A (если вы где-то пишете new A()), который содержит 9 B экземпляров, и каждый из них содержит ссылку на один и тот же экземпляр A.

Это создаетцикл в том смысле, что память A и B не может быть освобождена, потому что они ссылаются друг на друга.Кроме этого нет проблем, нет «бесконечного» цикла, который мог бы вызвать серьезные проблемы, в частности, нет бесконечного цикла, создающего все больше и больше объектов.

Если вы написали

class B {

    A a;

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

тогда вы попадете в беду.

2 голосов
/ 24 мая 2019

Не будет .. Вы просто захватываете ссылку на объект класса A с помощью

    this.a = a;

, а не создание нового.

...