1

以下两者之间是否有区别:

ArrayList list = getData();

public ArrayList getData(){
    return otherList;
}

ArrayList list = someOtherArrayList;
4

4 回答 4

3

没有区别。在这两种情况下,您都在分配对list现有ArrayList.

于 2012-06-22T12:58:19.527 回答
1

不,List 只是对内存中对象的引用。这意味着如果你这样做:

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

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

在方法中,您返回相同的引用,因此它的行为相同。如果您在方法中返回列表的副本,那么两种方法不同。

于 2012-06-22T13:00:47.647 回答
1
ArrayList list = someOtherArrayList;

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

ArrayList list = getData();

public ArrayList getData() {   
    return otherList;
}

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

于 2012-06-22T13:04:23.940 回答
0

这很奇怪:

ArrayList list = getData();

public ArrayList getData(){
    return list;
}

您将 list 设置为其自己的值,即最初的null.

因此,如果someotherlist不为空,则有所不同,因为您 1 什么也不做。

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

于 2012-06-22T13:02:22.507 回答