Добрый вечер! Может ли кто-то доступным языком объяснить начинающему, почему после команды char [] temp=chars[1] вместе с изменением значений массива char temp начинают меняться и значения второй строки (chars[1]) исходного массива? Наверное, это как-то связано с хранением ссылок)? Заранее благодарю)) Задачу "Вырезаем середину" я решил, однако в ходе пробы разных решений столкнулся с таким вопросом) На приложенной картинке в окне debug можно увидеть, что значения chars[1] стали равными значениям массива temp.
Eugene
12 уровень
Одна из задач 6 уровня
Комментарии (1)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Eugene
26 января 2022, 08:52
Попытаюсь сам ответить на свой пост. Кажется, я нашел правильный ответ на сайте Александра Климова http://developer.alexanderklimov.ru/android/java/array.php. Огромное спасибо!!!
Необходимо быть осторожным с копированием массивов. Массив - это не числа, а специальный объект, который по-особому хранится в памяти.
Покажем это на примере.
Допустим, у нас есть одна переменная, затем мы создали вторую переменную и присвоили ей значение первой переменной. А затем проверим их.
int a = 5;
int b = a;
mInfoTextView.setText("a = " + a + "\nb = " + b);
Получим ожидаемый результат.
a = 5
b = 5
Попробуем сделать подобное с массивом.
int[] anyNumbers = {2, 8, 11};
int[] luckyNumbers = anyNumbers;
luckyNumbers[2] = 25;
mInfoTextView.setText("anyNumbers: " + Arrays.toString(anyNumbers)
+ "\nluckyNumbers: " + Arrays.toString(luckyNumbers));
Получим результат.
anyNumbers: [2, 8, 25];
luckyNumbers: [2, 8, 25];
Мы скопировали первый массив в другую переменную и в ней поменяли третий элемент. А когда стали проверять значения у обоих массивов, то оказалось, что у первого массива тоже поменялось значение.
Таким образом, отвечаю на свой вопрос – при копировании в новую переменную temp значений второй строки исходного массива (chars[1]), переменная temp на самом деле не создает копию, а обращается ко второй строке исходного массива.
0