2011-10-07 3 views
5

次のコードがあるとします。Iterablesのたびに呼び出されるforループの「条件」ですか?

for (Object obj : Node.getIterable()) { 
    //Do something to object here 
} 

とNode.getIterable()は繰り返し可能な値を返します。 getIterable()関数は毎回、またはforループが開始されたときにのみ呼び出されますか?それを次のように変更する必要があります:

Iterable<Object> iterable = new Iterable<Object>(); 
//populate iterable with objects 
for (Object obj : iterable) { 
    //Do something 
} 
+4

簡単な方法...ちょうど(あなたが好む場合、またはファイル)もコンソールに何かを書き込み方法でNode.getIterableを包みます。それから、何回呼び出されたかを見ることができます。私の賭け - それは一度しか呼び出されませんが、私は確かな答えを与えるのに十分な自信がありません。 –

答えて

11

Java言語仕様では、foreach文の正確な内容を詳しく説明しています。詳細は、「14.14.2拡張ステートメント」を参照してください(http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.14.2)。しかし要するに、実際には、言語は、反復処理中の式が一度しか評価されないことを保証します。

3

いや、それはしていません。それはメモリ内のgetIterable()から受信した反復可能なアイテムを保持し、その参照を使用します。すばやく確認するには、forステートメントにブレークポイントを設定し、JDKにデバッグする方法があります。あなたは知るようになるでしょう。見つけるために

関連する問題