分配值的困惑

时间:2012-06-22 12:55:43

标签: java

以下两者之间是否存在差异:

ArrayList list = getData();

public ArrayList getData(){
    return otherList;
}

ArrayList list = someOtherArrayList;

4 个答案:

答案 0 :(得分:3)

没有区别。在这两种情况下,您都要为list分配对现有ArrayList的引用。

答案 1 :(得分:1)

没有。列表只是引用到内存中的对象。 这意味着,如果你这样做:

list1 = list2;
list1.add("abc");

list2.get(list2.size()-1)也将是“abc”。

在方法中,您返回相同的引用,因此它的行为相同。如果您在方法中返回列表的复制,则两种方法不同。

答案 2 :(得分:1)

ArrayList list = someOtherArrayList;

在这种情况下,someOtherArrayList的直接地址被分配给列表。

ArrayList list = getData();

public ArrayList getData() {   
    return otherList;
}

在这种情况下,返回列表的地址被复制到临时变量和稍后的临时变量列表中。这里地址复制在临时变量中,因为:当函数返回时,堆栈上的所有数据都被解除分配/删除,因此其他列表对象引用也被删除。但在此之前,它是将引用/地址复制到临时变量中。将临时变量的地址复制到列表变量中时。它也被删除了。

答案 3 :(得分:0)

这很奇怪:

ArrayList list = getData();

public ArrayList getData(){
    return list;
}

您将列表设置为自己的值,即最初null

因此,如果someotherlist不为空,则因为1什么都不做而存在差异。

编辑:看到了您的编辑内容。现在两个分配是相同的。没有区别。我们可以争辩说,当调用函数时,其中一个可能会慢一些,但在这种情况下,JIT编译器会快速内联它。