以下两者之间是否存在差异:
ArrayList list = getData();
public ArrayList getData(){
return otherList;
}
和
ArrayList list = someOtherArrayList;
答案 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编译器会快速内联它。