Если кто-то может объяснить разницу между этими двумя типами инициализации массива, это будет здорово:
В классе ListReturn
есть статический метод getList()
, который при вызове возвращает ArrayList<Some_Custom_Object>
.
В вызывающем классе я могу вызвать функцию двумя способами:
List<Some_Custom_Object> listFromCall = new ArrayList<Some_Custom_Object>();
listFromCall=ListReturn.getList();//works completely fine
List<Some_Custom_Object> listFromCall = ListReturn.getList();//Works completely fine
Мой вопрос здесь в том, что во втором сценарии нам не нужно инициализировать или создавать экземпляр объекта listFromCall? Можно ли напрямую назначить возвращаемые значения из метода неинициализированному объекту List / ArrayList?
Может кто-нибудь объяснить, что здесь происходит под капотом?
Благодарность
2 ответа
Давайте обсудим оба пути один за другим,
Первый способ:
List<Some_Custom_Object> listFromCall = new ArrayList<Some_Custom_Object>();
Значит, что-то подобное,
listFromCall=ListReturn.getList();//works completely fine
он отразится на присвоении значения listFromCall , см. изображение ниже для более глубокое понимание,
Здесь завершение обоих операторов, всего либо создано 2 объекта (1 будет иметь право на сборку мусора после второго создания и назначения), либо создан 1 объект (который получит право на сборку мусора и присвоит значение null ссылочной переменной)
Ваш второй путь:
Теперь, если вы сделаете что-то подобное,
2. List<Some_Custom_Object> listFromCall = ListReturn.getList();//Works completely fine
Потом появится что-то подобное,
Итак, здесь либо
1-object(of ArrayList)
будет создано в куче, либо нет.
Вам нужно только инициализировать переменную, если вы читаете из нее, прежде чем писать в нее.
Если вы пишете в неинициализированную переменную, компьютеру все равно, потому что вы инициализируете его с помощью возвращаемого значения из ListReturn.getList()
.
Фактически, вам не следует без нужды инициализировать объектные переменные ничем, кроме null
, если они собираются перезаписать перед использованием. В противном случае вы создаете и собираете мусор лишний объект без причины.
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.