2012-03-21 15 views
1

関数から返された配列を反復処理する最良の方法は何ですか?Javaの関数が返す配列を反復処理する方法

例:

for (String s : collectMyStrings()){ 
    System.out.println(s); 
} 

は、各反復で呼び出さcollectMyStrings()は、またはJavaは一度だけ、それを呼び出すと、forループのすべての反復のために返された配列を使用していますか?

+5

あなたは自分の質問に答えてみることができます。 –

+0

はい、私は – kadrian

+0

のように、他の人がGoogleを試してみたら、それを文書化しておきたいと思っています。しかし、私はそれが一度だけそれを呼び出すと思います。 – Colleen

答えて

6

これは1回だけ呼び出され、返された配列のイテレータが(暗黙的に)作成されます。

+0

配列の場合、コンパイラはfor-eachループをインデックス変数を持つ通常のforループに変換します。 'Iterable'オブジェクトのfor-eachループのみが反復子ベースのループに変換されます。 – Natix

+0

もう少しコンテキストを追加するだけです。私はあなたが繰り返されているものを変更することはできない/変更すべきではないと信じています。したがって、コンパイラが返される繰り返し可能な値をキャッシュすることは意味をなさないでしょう。 – Andy

0

メソッドcollectMyStrings()は、繰り返し実行する配列/コレクションを取得するために1回だけ呼び出されます。

2

アレイの場合、for-eachループは、Javaコンパイラによって、インデックス変数を持つ通常のforループに変換されます。それはあなたのコードスニペットは、このとほぼ同じであることを意味しますので、

String[] strings = collectMyStrings(); 
int length = strings.length; 

for (int i = 0; i < length; i++) { 
    String s = strings[i]; 
    System.out.println(s); 
} 

、あなたが見ることができるように、この方法は、一度だけ呼ばれます。配列の長さプロパティでさえ、一度だけ読み込まれます。

関連する問題