Не подскажете в чем разница между объявленной переменной и инициализированной?
Fulkin
38 уровень
Недопонимание.
Решен
Комментарии (12)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #598481
13 января 2020, 20:01решение
Объявленная переменная - это как пустая коробочка, в которую можно положить вещь только определенного типа.
Инициализированная - это коробочка, в которую положили вещь нужного типа
😁
Смеюсь над контрастом с предыдущим ответом.
+3
Vorlock
14 января 2020, 18:19
пока вы смеетесь, другие давно работают. рекомендую почитать про дженерики и потом расскажите про
0
IceBergMaster
14 января 2020, 22:04
Ну так тип же всё равно будет определённый, просто определится позже.
0
hidden #598481
15 января 2020, 03:48
Я сказал "смеюсь над ответом" или "смеюсь над контрастом"? Посмотри, пожалуйста, прежде чем принимать на свой счёт.
Просто ты сразу полез в дебри и стал рассказывать про выделение памяти, а я просто объяснил, что инициализированная переменная содержит значение, а просто объявленная - пустая. ТС на 2 уровне, уверен на 99 процентов, что именно это его и интересовало.
И причем здесь дженерик, если я просто говорю про класс переменной?
0
Vorlock
15 января 2020, 17:28
или не сможет определиться )))
с проблемой "стирание типов" сталкивались уже?
0
Vorlock
15 января 2020, 17:31
тут согласен, я как-то не учел что ТС еще только вначале своего пути. 🤝
0
Vorlock
13 января 2020, 19:39
String str; // объявленная переменная
String str = "some text"; //инициализированная переменная
При инициализации переменной под неё будет выделено место в памяти, отведённой java процессу, в рамках которого будет выполняться наша программа. Память, выделяемая java процессу, разделена на несколько областей или зон. В какой из них будет выделено место зависит от того, какого типа была объявлена переменная.
+2
Justinian Judge в Mega City One Master
14 января 2020, 05:27
Думаю что это не так.
Память под "нее" (кого, чего - переменную), выделяется в памяти при объявлении переменной, а не при инициализации.
А дальше два сценария, если переменная ссылочного типа, то дальше будет выделяться память для для "него" (кого, чего), объекта, который будет создан и ссылка на который будет помещена в область памяти УЖЕ выделенную раннее.
Если переменная примитивного типа, то насколько я понимаю, вообще при инициализации ничего не будет выделяться, поскольку в УЖЕ выделенный раннее участок памяти пойдет значение примитива.
0
Vorlock
14 января 2020, 19:19
да, вы батенька, наркоман. такими мыслями мыслить ))
Chapter 2. The Structure of the Java Virtual Machine
тоисть, с ваших слов, для переменной ссылочного типа память будет выделана дважды? :D 1й раз - при объявлении переменной и 2й раз - если переменная ссылочного типа, то дальше будет выделяться память для для "него" (кого, чего)
то что вы пытаетесь думать - уже хорошо, плохо что получается пока у вас неважно.
Инициализация (от англ. initialization, инициирование) — создание, активация, подготовка к работе, определение параметров. Приведение программы или устройства в состояние готовности к использованию. С точки зрения Java — выделение памяти под объект, например при создании MyClass myClass = new MyClass(). Таким образом будет выделена память под объект myClass (он будет инициализирован). Без инициализации (new MyClass()) запись MyClass myClass; просто резервирует имя (объявляется переменная myClass типа MyClass).
ну и к обязательному прочтению - 0
Justinian Judge в Mega City One Master
14 января 2020, 21:19
Разделение "просто резервирования" и выделения памяти это явно из докладов Бабушкина по JVM internals, не читал их, это мое досадное упущение, которое я безусловно признаю.
0
Wladyslaw Java Developer Master
15 января 2020, 00:17
На самом деле место под ссылку будет выделено на стеке, в фрейме, если это локальная переменная, как с полями объектов - не стану утверждать, но предположу что таки в хипе или в пермгене, если речь о статике. Сейчас может быть иначе ибо теперь пермгена нет, а есть метаспэйс. Не уверен что он в этом смысле работает аналогично. Место под объект - в хипе. Ссылка может ни на что не ссылаться но память для нее выделена будет, просто виртуальная машина ее проинициализирует нуллом, если это не локальная переменная. Out-of-air значений в джаве не бывает. Как с локальными ссылками тоже не стану утверждать. Скорее всего память будет выделена сразу, а проинициализировать ее нас вынудит компилятор.
+1
Vorlock
15 января 2020, 17:35
тут согласен, интересно.
вообще про память мне кажется это уже программа за границами этого курса.
мы на своем проекте планируем усиленно этим заняться, т.к. стали иногда ловить утечки.
в результате тоже надеюсь прокачать свои познания в этой области.
0