Объект существует пока есть ссылка?

По-моему, одно из первых, чему учат java-новичков, это то, что объект существует, пока существует ссылочная переменная указывающая на него. А потом придет сборщик мусора и т.д. Тогда почему работает подобный код? Ведь ссылок нет. Как живут объекты new Cat()?

static class Cat{}

List<Cat> list = new ArrayList<>(10);
for (int i = 0; i < 10; i++) {
    list.add(new Cat());
}
for (Cat cat : list) {
    System.out.println(cat);
}

Ответы (1 шт):

Автор решения: NeverSleeps

Оператор new создает экземпляр указанного класса и возвращает ссылку на вновь созданный объект. Т.е. когды Вы пишете строку list.add(new Cat());, вы добавляете в list ссылку на новый объект класса Cat.

А в строке for (Cat cat : list) идёт считывание по очереди ссылок на объекты из списка list во временный объект cat

А объект действительно существует, только пока существует ссылочная переменная указывающая на него. Т.е. если выполнить list.remove(0);, то ссылка на нулевой элемент списка будет утеряна, и можно будет сказать, что этот нулевой объект перестанет существовать.

→ Ссылка