如果有人能够解释这两种类型的阵列初始化之间的区别,那就太棒了:
班级ListReturn
中有一个静态方法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
a = B || {};
我的问题是,在第二种情况下,我们不必初始化或实例化listFromCall对象?,我们可以直接将返回值从方法分配给未初始化的List / ArrayList对象吗?
有人可以在这里解释引擎盖下发生的事情吗?。
由于
答案 0 :(得分:2)
如果您在写入变量之前从中读取变量,则只需对其进行初始化。
如果您写入未初始化的变量,则计算机不关心,因为您使用ListReturn.getList()
的返回值对其进行初始化。
事实上,如果在使用之前将对象变量覆盖,则不应该将对象变量初始化为除null
以外的任何变量。否则,您无缘无故地创建并垃圾收集额外的对象。
答案 1 :(得分:1)
让我们逐一讨论,
第一种方式:
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}}会在堆上创建。