А разве можно создавать 10 одинаковых объектов? Т.е. 10 переменных с одинаковыми именами
Kate
8 уровень
10 одинаковых котов
Обсуждается
Комментарии (13)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Konstantin Stepanyuk
29 июля 2021, 03:42
" Создать 10 объектов Cat и вывести значение переменной catCount на экран." - ни слова о Одинаковых объектах.
+1
НикитаExpert
28 июля 2021, 19:08
нет, нельзя. В этой задаче от вас этого и не требуется. Вам нужно создать 10 котов
+1
Kate
29 июля 2021, 09:50
Окей, а что тогда происходит, когда мы 10 раз в цикле прокручиваем "Cat cat = new Cat()"?
Разве не создается 10 раз "cat"?
0
KIRAExpert
29 июля 2021, 10:39
А в этом случае мы тоже 10 переменных создаем?
for (...) {
int count = 5;
}
0
НикитаExpert
29 июля 2021, 11:35
вы создаёте одну переменную 10 раз.
+1
Kate
29 июля 2021, 12:05
И это считается десятью обьектами?
0
НикитаExpert
29 июля 2021, 12:17
нет, с чего вы взяли?
0
НикитаExpert
29 июля 2021, 12:19
у вас есть какой-то код, по которому вы задали этот вопрос?
0
hidden #598481
29 июля 2021, 13:43
Конечно считается.
Каждое выполнение команды new - это создание объекта в куче.
Если при этом выполняется операция присваивания, то ссылка на этот объект помещается в указанную переменную.
Учитывая область видимости переменной, если переменная объявлена внутри цикла, то она создается заново каждый раз на каждой итерации цикла. И каждый раз в нее помещается ссылка на новый созданный объект. Если объявить переменную до цикла, то переменная будет одна и та же, а объект в ней на каждом шаге цикла будет новый.
Вот простой пример
В цикле ты создаешь объекты при помощи вызова конструктора new Cat().
При этом конструктор написан таким образом, что каждый создаваемый объект добавляется в список cats, а содержимое переменной cat при этом перезаписывается на каждой итерации.
Можно создавать объекты вовсе не помещая их в переменную. Только если ссылку на объект не записать в переменную или в коллекцию (список, массив, ... ), то потом к этому объекту уже не сможешь обратиться, и его уничтожит сборщик мусора JVM, освобождая память компьютера. +2
hidden #598481
29 июля 2021, 13:47
При этом все эти объекты будут разные. У них нет никаких характеристик, типа имени или возраста, поэтому их никак нельзя охарактеризовать с человеческой точки зрения, но с точки зрения компьютера это будет десять отдельных безымянных котов. Определять разницу между ними будет только тот факт, что ссылки на эти объекты будут отличаться:
0
Kate
29 июля 2021, 14:09
Не могла прикрепит к вопросу, т.к. задача уже решена
public class Solution {
public static void main(String[] args) {
// Создай 10 котов
for(int x = 0; x<10; x++){
Cat cat = new Cat();
}
System.out.println(Cat.catCount);
// Выведи значение переменной catCount
}
public static class Cat {
// Создай статическую переменную catCount
public static int catCount = 0;
// Создай конструктор
public Cat(){
catCount++;
}
}
}
+1
НикитаExpert
29 июля 2021, 14:11
Ну по факту вы каждый раз создаете нового кота, да. и валидатор это засчитал, но на деле у вас будет только один кот и тот будет существовать только внутри цикла
+3
YesOn
24 октября 2021, 23:25
Также через цикл for пробовал решить, но валидатор не пропускает такое решение, а IDE пишет, что public static class Cat "Выражение синтаксически не верное.."
Дополнение:
Решение прошло, после того, как вынес sout из цикла. Бред для IDE - норма для валидатора JAVARUSH. Расписал всё в комментариях к задаче.
0