22

new for eachループがIterableと配列で機能することは理解していますが、配列を操作するときに舞台裏で何が行われるのかわかりません。

誰かが私がこれを理解するのを手伝ってもらえますか?前もって感謝します。

int[] number = new int[10];

for(int i: number) {

}
4

7 に答える 7

16

ループは次と同等です。

for(int j = 0; j < number.length; j++) {
  int i = number[j];
  ...
}

ここで、jは内部で生成された参照であり、通常のユーザーIDと競合しません。

于 2013-01-10T19:39:47.423 に答える
3

コードでは、メモリに10個の整数の配列を割り当て、それへの参照を取得します。forループでは、配列内のすべてのアイテムを反復処理するだけです。最初はすべてのアイテムで0になります。iすべての項目の値は、配列要素を反復処理するときにforループで宣言された変数に格納されます。

于 2013-01-10T19:39:05.820 に答える
2

これは次と同等です。

for(int x = 0; x < number.length; x++) {
  int i = number[x];
}
于 2013-01-10T19:40:28.483 に答える
1

これは次と同等です。

final int len = number.length;
for(int j = 0; j < len; j++) {
  int i = number[j];
}

forEach は各ループで .length を評価しないことに注意してください。これもJVMによって排除される可能性がありますが、特にコレクションの場合、一部が使用する場合があります

for(int j = 0; j < collection.size(); j++) {

それはより速いものに(小さな)違いをもたらします

int len = collection.size()
for(int j = 0; j < len; j++) {
于 2013-01-10T19:55:24.347 に答える
0

for each over arrayは、本質的にこの構成の「砂糖」です。

for(int i = 0;i<number.length;i++)
{  
}

これは言語の構成として提供されたものであり、古い方法で繰り返された構造に対して拡張forループを使用できるようになっていると思います。

于 2013-01-10T19:39:56.273 に答える
0

IntStream.range(1,4)Java 8 を使用している場合は、使用できます。

于 2016-11-23T13:02:49.010 に答える