次の2つに違いはありますか:
ArrayList list = getData();
public ArrayList getData(){
return otherList;
}
と
ArrayList list = someOtherArrayList;
次の2つに違いはありますか:
ArrayList list = getData();
public ArrayList getData(){
return otherList;
}
と
ArrayList list = someOtherArrayList;
違いはありません。どちらの場合もlist
、既存のへの参照を割り当てていますArrayList
。
いいえ。リストはメモリ内のオブジェクトへの単なる参照です。これは、次のことを意味します。
list1 = list2;
list1.add("abc");
list2.get(list2.size()-1)
「abc」にもなります。
メソッドでは、同じ参照を返すため、同じように動作します。メソッドでリストのコピーを返す場合、2 つのアプローチが異なります。
ArrayList list = someOtherArrayList;
この場合、 someOtherArrayList の直接アドレスが list に割り当てられます。
ArrayList list = getData();
public ArrayList getData() {
return otherList;
}
この場合、返されたリストのアドレスは一時変数にコピーされ、後で一時変数がリストにコピーされます。ここで一時変数にコピーされたアドレス: 関数が戻ると、スタック上のすべてのデータが割り当て解除/削除されるため、otherList オブジェクトの参照も削除されます。ただし、その前に参照/アドレスが一時変数にコピーされます。一時変数のアドレスをリスト変数にコピーする場合。これも削除されます。
それは非常に奇妙です:
ArrayList list = getData();
public ArrayList getData(){
return list;
}
list を独自の値に設定しています。つまり、 initialnull
です。
したがって、someotherlist
null でない場合は、何もしないので違いがあります。
EDIT :あなたの編集を見ました。これで、両方の割り当てが同じになりました。違いはありません。関数が呼び出されると、そのうちの 1 つが少し遅くなる可能性があると主張できますが、この場合、JIT コンパイラによって高速にインライン化されます。