1

次の2つに違いはありますか:

ArrayList list = getData();

public ArrayList getData(){
    return otherList;
}

ArrayList list = someOtherArrayList;
4

4 に答える 4

3

違いはありません。どちらの場合もlist、既存のへの参照を割り当てていますArrayList

于 2012-06-22T12:58:19.527 に答える
1

いいえ。リストはメモリ内のオブジェクトへの単なる参照です。これは、次のことを意味します。

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

list2.get(list2.size()-1)「abc」にもなります。

メソッドでは、同じ参照を返すため、同じように動作します。メソッドでリストのコピーを返す場合、2 つのアプローチが異なります。

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

この場合、 someOtherArrayList の直接アドレスが list に割り当てられます。

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 を独自の値に設定しています。つまり、 initialnullです。

したがって、someotherlistnull でない場合は、何もしないので違いがあります。

EDIT :あなたの編集を見ました。これで、両方の割り当てが同じになりました。違いはありません。関数が呼び出されると、そのうちの 1 つが少し遅くなる可能性があると主張できますが、この場合、JIT コンパイラによって高速にインライン化されます。

于 2012-06-22T13:02:22.507 に答える