2016-04-25 10 views
-1

Если кто-то может объяснить разницу между этими двумя типом массива инициализаций было бы здорово:Java List/Список массив осветление

Существует статический метод getList() в классе ListReturn, который возвращает 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?

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

Благодаря

+0

'ListReturn'? это любой стандартный класс? Если нет, то это будет зависеть от импиментации. – SacJn

+1

Номер 1 выглядит так, как будто он был написан кем-то, кто не знает, что они делают. Нет смысла назначать новую переменную 'ArrayList' переменной, которую вы немедленно собираетесь установить на что-то еще. – khelwood

ответ

1

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

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

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

значит, что-то же самое,

enter image description here

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

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

enter image description here

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

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

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

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

Тогда появится что-то же самое,

enter image description here

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

+0

Большое вам спасибо за подробное объяснение, я очень ценю, что вы нашли время, чтобы объяснить это. У меня есть только один запрос. вторая диаграмма подхода, не должна быть OR между нулевым значением и возвращаемым значением ListReturn.getList(); метод. – RookieHere

+0

@RookieВозвратитесь во второй подход, возможно, не созданный экземпляр в этом случае назначит null иначе экземпляр –

+0

Большое спасибо за ответ на Mr.Vishal – RookieHere

2

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

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

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

+0

Большое спасибо за ваш ответ, смысл создания и создания дополнительного объекта имеет смысл. Спасибо – RookieHere