Если кто-то может объяснить разницу между этими двумя типами инициализации массива, это будет здорово:

В классе ListReturn есть статический метод getList(), который при вызове возвращает ArrayList<Some_Custom_Object>.

В вызывающем классе я могу вызвать функцию двумя способами:

  1. List<Some_Custom_Object> listFromCall = new ArrayList<Some_Custom_Object>(); listFromCall=ListReturn.getList();//works completely fine

  2. List<Some_Custom_Object> listFromCall = ListReturn.getList();//Works completely fine

Мой вопрос здесь в том, что во втором сценарии нам не нужно инициализировать или создавать экземпляр объекта listFromCall? Можно ли напрямую назначить возвращаемые значения из метода неинициализированному объекту List / ArrayList?

Может кто-нибудь объяснить, что здесь происходит под капотом?

Благодарность

-1
lryk 25 Апр 2016 в 17:24

2 ответа

Лучший ответ

Давайте обсудим оба пути один за другим,

Первый способ:

  1. List<Some_Custom_Object> listFromCall = new ArrayList<Some_Custom_Object>();

Значит, что-то подобное,

enter image description here

listFromCall=ListReturn.getList();//works completely fine

он отразится на присвоении значения listFromCall , см. изображение ниже для более глубокое понимание,

enter image description here

Здесь завершение обоих операторов, всего либо создано 2 объекта (1 будет иметь право на сборку мусора после второго создания и назначения), либо создан 1 объект (который получит право на сборку мусора и присвоит значение null ссылочной переменной)

Ваш второй путь:

Теперь, если вы сделаете что-то подобное,

2.    List<Some_Custom_Object> listFromCall = ListReturn.getList();//Works completely fine

Потом появится что-то подобное,

enter image description here

Итак, здесь либо 1-object(of ArrayList) будет создано в куче, либо нет.

1
Vishal Gajera 25 Апр 2016 в 14:47

Вам нужно только инициализировать переменную, если вы читаете из нее, прежде чем писать в нее.

Если вы пишете в неинициализированную переменную, компьютеру все равно, потому что вы инициализируете его с помощью возвращаемого значения из ListReturn.getList().

Фактически, вам не следует без нужды инициализировать объектные переменные ничем, кроме null, если они собираются перезаписать перед использованием. В противном случае вы создаете и собираете мусор лишний объект без причины.

2
Darth Android 25 Апр 2016 в 14:26