2016-03-29 16 views
2

リスト参照を変更し、それを反復処理中に新しいリスト全体を指し示しますが、それでも古い値を出力します。リスト参照を繰り返している間に値を変更しないでください

反復処理中にリスト自体を参照して変更しようとしていて、参照自体が変更されたり、新しいオブジェクトが作成されて元のリストに割り当てられたりする理由が間違っているようです。

for (String s : lst) { 
System.out.println("list is:"+lst); 
System.out.println(s); 
lst = lst1; 
} 

これは、1回の繰り返しの後も古いリストを出力します。

+0

適切なコードを入力してください。あなたのコードは宣言されていない参照変数をいくつか表示します。 –

+0

*別の機能がリファレンス自体を変更する*マルチスレッド環境で作業していますか? –

+0

これはマルチスレッドアプリケーションのようなものですが、2番目のトリガーはJMX呼び出しから来ます。 –

答えて

0

forこの場合のループは、リストではなく、リストのイテレータで暗黙的に動作します。したがって、リストのリンクを変更しても効果はありません。古いイテレータを暗黙的に使用しています。

リストの反復子が取得される最初の反復自体に、FOR-各ループにおいて、このThe For-Each Loop、このHow does the Java for each loop work?

0

を参照してください。これは、コンパイル中に定義されるfor-eachループの内部処理メカニズムが原因です。したがって、リスト参照に新しいインスタンスを割り当てるだけでは、イテレータには影響しません。

関連する問題