Каков размер массива после переопределения его переменной? - PullRequest
0 голосов
/ 06 октября 2019

В Java у меня есть существующий массив длины N, назначенный переменной с именем st. Если я создам новый массив того же типа с размером N + k с именем newSt. Каков результат newSt = st? Будет ли в newSt содержимое st и пустое пространство, или newSt уменьшит его длину до длины st?

Object[] st = new Object[20];

// st is filled

Object[] newSt = new Object[40];

newSt = st;

Ответы [ 3 ]

0 голосов
/ 06 октября 2019

Я думаю, что вы запутались, потому что вы пытаетесь воспринимать это как структурное назначение, но это ссылочное обозначение.

Когда вы secondArray = firstArray, вы делаете переменную secondArray для ссылки firstArry обе переменные с разными именами ссылаются на один и тот же объект в памяти. Ваша предыдущая инициализация secondArray потеряна.

Таким образом, размер newSt и всех объектов такой же, как для st, поскольку newSt - это st, но с другим именем.

То, что вы думаете, будет чем-то вроде конструктора, который использует в качестве аргумента другой массив и размер.

0 голосов
/ 06 октября 2019

В Java имена переменных сохраняют ссылку на фактический массив. Таким образом, st=new Object[20] создает массив размером 20 и назначает ссылку для st, а newSt=new Object[40] создает массив размера 40 и назначает ссылку для newSt.

Так что, когда мы устанавливаем st=newSt, мы просто присваиваем ссылку массива на st, на который ссылается newSt. Так что теперь мы можем использовать st для доступа ко всем значениям второго массива.

Он не будет выполнять никакого слияния, объединения или пересечения массивов.

0 голосов
/ 06 октября 2019

Длина будет 20 ...

Вы также можете проверить это сами:

Object[] st = new Object[20];
System.out.println("st: " + st.length);
Object[] newSt = new Object[40];
newSt = st; // newSt was Object[40], st is Object[20] => newSt is now Object[20].
System.out.println("newSt: " + newSt.length);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...