Есть ли разница между следующими двумя:Путаница с присвоением значения
ArrayList list = getData();
public ArrayList getData(){
return otherList;
}
и
ArrayList list = someOtherArrayList;
Есть ли разница между следующими двумя:Путаница с присвоением значения
ArrayList list = getData();
public ArrayList getData(){
return otherList;
}
и
ArrayList list = someOtherArrayList;
ArrayList list = someOtherArrayList;
В этом случае прямому адресу someOtherArrayList присваивается список.
ArrayList list = getData();
public ArrayList getData() {
return otherList;
}
В этом случае адрес возвращаемого списка копируется во временную переменную, а затем временную переменную в список. Здесь адрес копируется во временную переменную, потому что: Когда функция возвращается, все ее данные в стеке освобождаются/удаляются, поэтому также ссылается на ссылку на объект otherList. Но до этого ссылка/адрес копируется во временную переменную. Когда адрес из временной переменной копируется в переменной списка. Он также удаляется.
Там нет никакой разницы. В обоих случаях вы назначаете list
ссылку на существующий ArrayList
.
нет, его не переменная samw – Rookie
Редактируйте код, чтобы сделать это понятнее. Измените имя одного из них. :) –
Отредактировал свой ответ, чтобы отразить ваше редактирование на вопрос. –
№. Список всего Ссылка на объект в памяти. Это означает, что если вы делаете:
list1 = list2;
list1.add("abc");
list2.get(list2.size()-1)
будет "а" также.
В методе вы возвращаете ту же ссылку, поэтому она ведет себя одинаково. Если вы вернете копию списка в методе, тогда два подхода разные.
Это очень странно:
ArrayList list = getData();
public ArrayList getData(){
return list;
}
Вы устанавливаете список свое значение, то есть изначально null
.
Так что если someotherlist
не является нулевым, есть разница, поскольку вы ничего не делаете.
EDIT: видел ваше редактирование. Теперь оба назначения идентичны. Нет никакой разницы. Мы могли бы утверждать, что один из них может быть немного медленнее по мере вызова функции, но в этом случае он будет быстро встроен компилятором JIT.
Почему вы думаете, что 'otherList' освобождается при выходе? Это не локальная переменная внутри этого метода. По-видимому, это поле члена класса. –
Да обряд. Это поле члена класса. – Rookie
@GrahamBorland: ссылка на объект удаляется, если список локально создан и возвращен. Но если это поле класса, то возвращается эта ссылка, но то же самое описано выше. –