new for eachループがIterableと配列で機能することは理解していますが、配列を操作するときに舞台裏で何が行われるのかわかりません。
誰かが私がこれを理解するのを手伝ってもらえますか?前もって感謝します。
int[] number = new int[10];
for(int i: number) {
}
ループは次と同等です。
for(int j = 0; j < number.length; j++) {
int i = number[j];
...
}
ここで、jは内部で生成された参照であり、通常のユーザーIDと競合しません。
コードでは、メモリに10個の整数の配列を割り当て、それへの参照を取得します。forループでは、配列内のすべてのアイテムを反復処理するだけです。最初はすべてのアイテムで0になります。i
すべての項目の値は、配列要素を反復処理するときにforループで宣言された変数に格納されます。
これは次と同等です。
for(int x = 0; x < number.length; x++) {
int i = number[x];
}
これは次と同等です。
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++) {
for each over arrayは、本質的にこの構成の「砂糖」です。
for(int i = 0;i<number.length;i++)
{
}
これは言語の構成として提供されたものであり、古い方法で繰り返された構造に対して拡張forループを使用できるようになっていると思います。
IntStream.range(1,4)
Java 8 を使用している場合は、使用できます。