dfr*_*kow 25 java iteration foreach
示例代码:
int a[] = new int[]{0, 1, 2, 3};
int result = 0;
for (int i : a)
result += i;
Run Code Online (Sandbox Code Playgroud)
是循环保证遍历跨越a[0],a[1],a[2],a[3]的顺序?我坚信答案是肯定的,但这个页面似乎并没有明确说明秩序.
有一个坚实的参考?
Joa*_*uer 46
根据JLS,增强for语句,你的for循环相当于
int[] array = a;
for (int index = 0; index < a.length; index++) {
int i = array[index];
result += i;
}
Run Code Online (Sandbox Code Playgroud)
" 编译器生成的标识符array与index编译器生成的标识符不同,这些标识符与增强for语句发生时的范围内的任何其他标识符(编译器生成的或其他标识符)不同." (稍微解释变量名称).
所以是的:订单绝对保证.
如果Expression的类型是Iterable的子类型,那么让我成为表达式Expression.iterator()的类型.增强的for语句相当于表单的基本for语句:
Run Code Online (Sandbox Code Playgroud)for (I #i = Expression.iterator(); #i.hasNext(); ) { VariableModifiersopt Type Identifier = #i.next(); Statement }其中#i是编译器生成的标识符,它与发生增强for语句时的范围(第6.3节)中的任何其他标识符(编译器生成的或其他标识符)不同.
它在JLS中指出:
for ( VariableModifiersopt Type Identifier: Expression) Statement
Run Code Online (Sandbox Code Playgroud)
相当于
T[] a = Expression;
L1: L2: ... Lm:
for (int i = 0; i < a.length; i++) {
VariableModifiersopt Type Identifier = a[i];
Statement
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8416 次 |
| 最近记录: |