9

私は Stack の pop メソッド用にこのコードを少し持っていて、インデックスが現在指している要素を返しながら、浮浪を回避する方法を理解しようとしています:

public String pop()
{ // Remove item from top of stack.
String item = a[--N];
a[N] = null; // Avoid loitering (see text).
if (N > 0 && N == a.length/4) resize(a.length/2);
return item;
}

私が理解できることから、String オブジェクトの参照項目を配列 a のインデックス付き要素 (現在のサイズ N-1 を使用して最後の要素から開始するため、デクリメント) を指しています。次に、参照を返す場合、参照が null を指しているインデックス付きの要素を設定する前に、なぜそれを設定するのでしょうか? それはアイテムを何も指さず、何も返さないのですか?

4

2 に答える 2

3

これにより、配列内の参照がコピーされます。配列メンバーを参照しません。

 String item = a[--N];

これで、同じオブジェクトへの 2 つの参照ができました。1 つはローカル変数に、もう 1 つは配列にあります。これにより、配列内のコピーが削除されます。

 a[N] = null; // Avoid loitering (see text).

配列から削除しないと、不要な参照が引き続き存在し、ガベージ コレクションが妨げられます。

于 2013-08-07T17:34:10.487 に答える