0

だから私はこのゲームチュートリアルを読んでいて、エイリアン/ミサイルを含むarrayListsを衝突時に消えさせるコードがあります。

  ArrayList ms = craft.getMissiles();

    for (int i = 0; i < ms.size(); i++) {
        Missile m = (Missile) ms.get(i);

        Rectangle r1 = m.getBounds();

        for (int j = 0; j<aliens.size(); j++) {
            Alien a = (Alien) aliens.get(j);
            Rectangle r2 = a.getBounds();

            if (r1.intersects(r2)) {
                m.setVisible(false);
                a.setVisible(false);
            }
        }
    }

最後のループでは、m.setVisible(false)とa.setVisible(false)により、特定のエイリアン/ミサイルが非表示になりますが、「a」と「m」はArrayListの一部ではなく、ArrayListオブジェクトが引き出されてキャストされます。 「a」および「m」ですが、コーダーが「a」または「m」オブジェクトを配列リストの特定の場所に挿入し直さない(または配列リストの対応するオブジェクトを更新しない)ことを考えると、コードは正常に機能しているようです。

'a'と'm'は、コピーではなく、配列リストのi番目のオブジェクトへのアドレスによって参照されていると思いますか?

4

4 に答える 4

4

はい。それらは参照です。あなたが言うときはいつでも

A a = new A();

Javaでは、これaは参照であり、実際のオブジェクトではありません(一般的な混乱の原因)。

標準コレクションを使用する場合、そのコレクションから要素を取得すると、含まれているオブジェクトへの参照が返されます。したがって、コレクションを反復処理して、含まれているオブジェクトに変更を加えるのは簡単です。

for(int i = 0; i < list.size(); i++) {
   list.get(i).clear(); // changes the object in the list...
}
于 2012-09-05T15:24:00.550 に答える
3

Javaのオブジェクトは、クローンを作成しない限り、常に参照によってコピーされます。したがって、プリミティブを使用していない限り、代入演算子を使用するか、関数から返すときに、参照によってコピーされます。

于 2012-09-05T15:24:00.143 に答える
1

clone()のようなものを呼び出さない限り、参照はコピーされ、オブジェクトはコピーされません。

ところで:ArrayListには参照が含まれています。オブジェクトの参照をArrayListに追加すると、オブジェクトはコピーされず、ArrayList自体には含まれません。

于 2012-09-05T15:24:35.073 に答える
0

ArrayList.get()コピーではなく、オブジェクトへの参照を提供します。

于 2012-09-05T15:24:19.560 に答える