以下两者之间是否有区别:
ArrayList list = getData();
public ArrayList getData(){
return otherList;
}
和
ArrayList list = someOtherArrayList;
以下两者之间是否有区别:
ArrayList list = getData();
public ArrayList getData(){
return otherList;
}
和
ArrayList list = someOtherArrayList;
没有区别。在这两种情况下,您都在分配对list
现有ArrayList
.
不,List 只是对内存中对象的引用。这意味着如果你这样做:
list1 = list2;
list1.add("abc");
list2.get(list2.size()-1)
也将是“abc”。
在方法中,您返回相同的引用,因此它的行为相同。如果您在方法中返回列表的副本,那么两种方法不同。
ArrayList list = someOtherArrayList;
在这种情况下,直接将 someOtherArrayList 的地址分配给列表。
ArrayList list = getData();
public ArrayList getData() {
return otherList;
}
在这种情况下,返回列表的地址被复制到临时变量中,然后将临时变量复制到列表中。这里地址复制到临时变量中,因为:当函数返回时,它在堆栈上的所有数据都被释放/删除,所以 otherList 对象引用也被删除。但在此之前,它是引用/地址被复制到临时变量中。当临时变量的地址被复制到列表变量中时。它也被删除。
这很奇怪:
ArrayList list = getData();
public ArrayList getData(){
return list;
}
您将 list 设置为其自己的值,即最初的null
.
因此,如果someotherlist
不为空,则有所不同,因为您 1 什么也不做。
编辑:看到你的编辑。现在两个分配是相同的。没有区别。我们可以争辩说,其中一个在调用函数时可能会慢一些,但在这种情况下,JIT 编译器会快速内联它。