2016-04-25 75 views
-1

如果有人可以解释这两种类型的数组初始化的,将是巨大的区别:Java列表/数组列表澄清

有一个在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对象?

有人能解释一下引擎盖下面发生了什么吗?

感谢

+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的价值分配,见下面的图片为 更深的了解,

enter image description here

这里,完成这两个声明的,总要么2 -object created(1 将有资格在第二次创建和分配后进行垃圾回收) 或1对象创建(这将符合垃圾收集 并分配null以参考变量)

你的第二个方式:

现在,如果你做的东西同样,

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

然后,它会出现一些同样,

enter image description here

因此,这里的1-object(of ArrayList)将在堆上创建或不。

+0

非常感谢您的详细解释,我非常感谢您花时间解释这一点。我只有一个查询。第二个方法图,不应该是null值和ListReturn.getList();的返回值之间的OR。方法。 – RookieHere

+0

@RookieHere进入第二种方法可能不会创建实例,在这种情况下将分配null否则实例 –

+0

非常感谢您回答Mr.Vishal – RookieHere

2

您只需如果从它,你写它之前阅读初始化变量。

如果您写入未初始化的变量,计算机不关心,因为您正在使用从ListReturn.getList()返回的值进行初始化。

实际上,如果在使用之前要覆盖它们,您不应该不必要地将对象变量初始化为除null之外的任何东西。否则,你无意中创建并垃圾收集额外的对象。

+0

非常感谢您的回答,创建和GCing一个额外对象的意义重大。谢谢 – RookieHere