Java List / Array List澄清

时间:2016-04-25 14:24:42

标签: java list arraylist return-value new-operator

如果有人能够解释这两种类型的阵列初始化之间的区别,那就太棒了:

班级ListReturn中有一个静态方法ArrayList<Some_Custom_Object>,在调用时会返回List<Some_Custom_Object> listFromCall = new ArrayList<Some_Custom_Object>();

在调用类中,我可以通过以下两种方式调用该函数:

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

  2. a = B || {};

  3. 我的问题是,在第二种情况下,我们不必初始化或实例化listFromCall对象?,我们可以直接将返回值从方法分配给未初始化的List / ArrayList对象吗?

    有人可以在这里解释引擎盖下发生的事情吗?。

    由于

2 个答案:

答案 0 :(得分:2)

如果您在写入变量之前从中读取变量,则只需对其进行初始化。

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

事实上,如果在使用之前将对象变量覆盖,则不应该将对象变量初始化为除null以外的任何变量。否则,您无缘无故地创建并垃圾收集额外的对象。

答案 1 :(得分:1)

让我们逐一讨论,

第一种方式:

  1. List<Some_Custom_Object> listFromCall = new ArrayList<Some_Custom_Object>();
  2. 同样意味着

    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}}会在堆上创建。