Не совсем понимаю как может так быть
// for (int i=0; i<50000; i++){
Cat cat = new Cat();
Dog dog = new Dog();
}
Веть создается 50000 одинаковых переменных (cat) класа Cat.
Я понял эту задачу, как с каждой итерацией цикла должны создаваться новые объекты ссылки на которые хранятся в переменных cat0, cat1 ..... cat49999
Антон
19 уровень
Непонятна суть цикла
Решен
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Стас Пасинков Software Developer в Zipy Master
20 июня 2018, 23:38
про области видимости переменных читали?
переменная, которая объявлена внутри определенного блока кода (в фигурных скобках) - видна только внутри этого блока кода. и как только этот блок кода закончился - переменная такая просто "выкидывается"/"забывается".
в вашем коде получается так, что переменные Cat cat и Dog dog вы на каждом шагу цикла создаете новые. ну и новые объекты в них помещаете каждый раз. и каждый раз, когда цикл переходит к следующей итерации - он "забывает" про те переменные (потому что как бы выходит за границы фигурных скобок), и создает новые с таким же именем. потом снова забывает их и снова создает новые... и так 50 000 раз :)
то-есть, у вас не только 50 000 разных объектов создастся (это там, где new Cat() делаете или new Dog()), но и переменные cat и dog - тоже 50 000 раз будут создаваться заново.
вот если бы вы написали как-то так:
то тут вы сначала создаете переменные, а потом просто на каждом шаге цикла кладете в них все новые и новые объекты :) но сами переменные не пересоздаются уже.
и насколько я помню, в этой задаче сами переменные можно и не создавать)) достаточно создавать сами объекты :) +9
Антон
21 июня 2018, 17:11
Большое спасибо за такое детальное разъяснение.
Понял это так что 50000 переменных создаются последовательно (стирается - создается-стирается) и в конце цикла будет всего 1 переменная и 49999 мертвых, а не 50000 разом.
0
Стас Пасинков Software Developer в Zipy Master
21 июня 2018, 18:06
ну не то чтобы мертвых... их вообще не будет существовать, строго говоря :) если мы говорим о том коде, что у автора топика
ну а если говорим о моем варианте кода - то после цикла будет видно 2 переменных: cat и dog.
а вот объектов - действительно будет создано 50 000, и 49 999 из них будут жертвами сборщика мусора и только один последний будет храниться в переменной той. точнее, в тех (50 000 котов и 50 000 собак)
0
Антон
20 июня 2018, 23:02
Суть задачи - продемонстрировать работу сборщика мусора.
Но результата не видно. от этого и не понимание.
Я понял это так что будет создано 50000 одинаковых строк, а по факту будет один объект
Это все равно что написать 50000 i=2; (не может создаться много разных переменных с одним именем "i")
0
Roman Pryshchepa Java Developer Expert
21 июня 2018, 07:31решение
по факту будет 50000 объектов Cat и 50000 объектов Dog.
+3
Evgeniia
20 июня 2018, 22:23
Думала, что Ваш вариант не сработал, но система принимает. Действительно, как мы можем создать несколько экземпляров с одним именем... Без цикла не получится же
0
Александр Смирнов
20 июня 2018, 22:34
Все остальные объекты заберет с собой "сборщик мусора" и останется только один, на который и будет ссылаться переменная: cat, dog
0
Стас Пасинков Software Developer в Zipy Master
20 июня 2018, 23:41
создавать объектов можно сколько угодно. вообще не обязательно их помещать в какие-то переменные. как и переменных можно создавать сколько угодно разных, и не обязательно в каждую переменную класть по объекту :)
просто сборщик мусора будет подчищать такие объекты, которые не лежат ни в одной переменной, то-есть такие, на которые не указывает ни одна ссылочная переменная. грубо говоря :)
+1
Evgeniia
20 июня 2018, 22:19
А что вы подразумеваете под словом "одинаковых"?
Я, к слову, делала так:
for (int i = 0; i < 50000; i++) {
new Cat();
new Dog();
}
+2