1

ArrayList<String>2つの別々のパッケージTopとtop10に2つの別々のオブジェクトがあります。アクティビティでtop10の値をTopに割り当てます。そして今、Topから要素を削除すると、top10からも削除されます。なぜこれが起こっているのか分かりませんか?私は完全に唖然と感じます。Javaについて知らないことがありますか?それともアンドロイドですか?

これは私のアクティビティコードです:

ArrayList<String> Top = new ArrayList<String>();          

// ServiceCall is the name of the class where top10 is initialized.

Top = ServiceCall.top10;

System.out.println("top WR: "+ServiceCall.top10);

if(Top.get(0).equals("Please Select")) Top.remove(0);   

System.out.println("top WR: "+ServiceCall.top10);

2番目の出力されたステートメントには、前の要素より1つ少ない要素が含まれています。

4

2 に答える 2

2

同じオブジェクトを指しています。

Top = ServiceCall.top10;

は新しいオブジェクトを作成するのではなく、他のオブジェクトを参照するため、両方のポインタのすべての変更が同じオブジェクトに反映されます。

もう1つをパラメータとして渡す新しいものを作成する必要があります。

List<String> Top = new ArrayList<String>(ServiceCall.top10);
于 2012-07-25T17:46:59.757 に答える
1

新しいリストを作成するのではなく、Topをtop10にポイントしています(初期化子は、他のリストに再ポイントしているだけなので、現在は事実上使用されていません)。

やったほうがいい:

ArrayList<String> Top = new ArrayList<String>(ServiceCall.top10);    

これにより、浅いコピーが作成されます。

于 2012-07-25T17:47:37.407 に答える