コード例:
int a[] = new int[]{0, 1, 2, 3};
int result = 0;
for (int i : a)
result += i;
ループは、、、、をこの順序a[0]
で繰り返すことが保証されていますか?答えはイエスだと強く信じていますが、このページは明確に順序を述べているようには見えません。a[1]
a[2]
a[3]
しっかりしたリファレンスを手に入れましたか?
JLS にfor
よると、強化されたステートメントでは、for ループは次のようになります。
int[] array = a;
for (int index = 0; index < a.length; index++) {
int i = array[index];
result += i;
}
「ここでarray
、およびは、拡張ステートメントが発生するindex
時点でスコープ内にある他の識別子 (コンパイラー生成またはその他) とは異なるコンパイラー生成の識別子です。」for
(ここでは変数名を少し言い換えています)。
そうです: 注文は完全に保証されています.
あなたが参照したページには、順不同の繰り返しを意味するものは見つかりませんでした。具体的な見積もりを投稿できますか?
いずれにせよ、このコードは次のとおりです。
public static void main( String args[] ) {
double a[] = new double[] { 0, 1, 2, 3 };
int result = 0;
for ( double i : a ) {
result += i;
}
古いスタイルのループに逆コンパイルします。
public static void main(String args[])
{
double a[] = {
0.0D, 1.0D, 2D, 3D
};
int result = 0;
double ad[];
int k = (ad = a).length;
for(int j = 0; j < k; j++)
{
double i = ad[j];
result = (int)((double)result + i);
}
}
もちろん、それは保証と同じではありませんが、少なくとも、配列に対する順不同の反復は非常に奇妙であり、明らかに常識的な実装に反するように思われます。