Привет всем. Помогите разобраться как это работает.
Я создаю массив.
Заполняю его данными.
Потом вызывается метод с моим массивом.
В методе я создаю еще один массив в который копирую всю инфу с 1го в обратно порядке.
Потом присваиваю первому массиву все значения 2го (в обратном порядке) и возвращаю его.
Но почему то уже в цикл for each идет массив с данными которые как будто не проходили через метод.
![]()
Anonymous #2478379
14 уровень
Что то непонятное происходит!
Обсуждается
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Alikhan
13 марта 2021, 14:07
это какая сортирвока?
0
Anonymous #2478379
25 февраля 2021, 19:10
Нужно будет еще почитать наверно про это все. Слабо уловил выходит
0
ГоффMaster
25 февраля 2021, 21:13
Попробую направить мысль.
В джаве есть примитивные типы переменных и ссылочные. В принципе, они ничем не отличаются - и те, и другие хранят некое значение. Но!
В случае с примитивами то значение, которое они хранят - это и есть то самое ультимативное значение, которое нас интересует. Например, если в примитивной переменной хранится 45, то там хранится именно число 45, которое нас интересует.
Ссылочные переменные хранят тоже некое значение, но это значение - не то, что нам нужно. Это только ссылка, адрес участка памяти, в котором хранится нужное нам значение. Если в ссылочной переменной хранится 45, то 45 - это не то, что нам нужно. Это только ссылка на некую область памяти, в которой хранится то, что нам интересно.
Пример из жизни - вот у нас есть дом. Дом - это то, что нам интересно. А вот адрес дома - это ссылка. Так вот, в переменной ссылочного типа хранится именно адрес этого дома, но не сам дом. Дом где-то в памяти тоже хранится, мы его можем юзать, можем жить, можем тусовать жильцов, можем перестраивать и даже продать можем, но нам для всего этого нужно знать его адрес. Доступ к дому у нас через переменную, в который этот адрес сохранён. Хочешь до дома доехать - говоришь таксисту адрес. Хочешь перестроить - направляешь строителей по адресу, который хранится в переменной типа Дом. Хочешь продать - в кадастре изменяешь запись, что дом по такому-то адресу...
+2
ГоффMaster
25 февраля 2021, 21:13
Когда мы говорим, что в переменной array или array2 хранится некий аррэй, то это неправда. Эти переменные ссылочные. В них хранится не аррэй, а адрес, ссылка на сам аррэй.
Когда ты пишешь
int[] array = new int[3];
то аррэй не записывается в переменную array. В памяти создаётся аррэй размером в три элемента, а ссылка на эту область памяти записывается в переменную array.
Когда ты пишешь array = array2;, то ты то значение, которое хранится в переменной array2, а это совсем не аррэй, а его адрес, записываешь в переменную array. Сами аррэи при этом не меняются, никакие значения из одного аррэя не переписываются в другой.
Просто теперь в обоих переменных хранится один и тот же адрес на один и тот же аррэй.
Аррэй, адрес которого до этого хранился в переменной array, постигнет печальная участь - его адрес больше нигде не сохранён, его невозможно найти, и его снесёт мусоросборщик. Но это уже другая тема, про снос невостребованного жилья =)
Уф, старался объяснить, как мог))
+2
Ksenia VolkovaJava Developer в DXCMaster
25 февраля 2021, 18:45
В строчке
первому массиву никакие значения не присваиваются.
Просто сначала у тебя локальная переменная array хранила ссылку на исходный массив, а array2 - на новый. А после этой строчки обе локальные переменные будут хранить ссылку на новый массив.
Но исходный массив при этом нисколько не меняется. И переменная arrray в методе main по-прежнему ссылается именно на него.
0
Дмитрий
25 февраля 2021, 18:38
Голова уже плохо соображает... а зачем вы в array = засовываете array2? Просто напишите return array2; А если нужно именно засунуть в тот оригинальный array, то переименуйте имя атрибута в методе, пожалуйста.
0