示例代码:
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
语句发生时的范围内的任何其他标识符(编译器生成的或其他标识符)不同." (稍微解释变量名称).
所以是的:订单绝对保证.
请参阅Java语言规范第3版第14.14.2节.
如果Expression的类型是Iterable的子类型,那么让我成为表达式Expression.iterator()的类型.增强的for语句相当于表单的基本for语句:
for (I #i = Expression.iterator(); #i.hasNext(); ) { VariableModifiersopt Type Identifier = #i.next(); Statement }其中#i是编译器生成的标识符,它与发生增强for语句时的范围(第6.3节)中的任何其他标识符(编译器生成的或其他标识符)不同.
它在JLS中指出:
for ( VariableModifiersopt Type Identifier: Expression) Statement
相当于
T[] a = Expression; L1: L2: ... Lm: for (int i = 0; i < a.length; i++) { VariableModifiersopt Type Identifier = a[i]; Statement }