当前位置:  开发笔记 > 编程语言 > 正文

Java foreach迭代顺序是否精确定义了基元?

如何解决《Javaforeach迭代顺序是否精确定义了基元?》经验,为你挑选了3个好方法。

示例代码:

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]的顺序?我坚信答案是肯定的,但这个页面似乎并没有明确说明秩序.

有一个坚实的参考?



1> Joachim Saue..:

根据JLS,增强for语句,你的for循环相当于

int[] array = a;
for (int index = 0; index < a.length; index++) {
    int i = array[index];
    result += i;
}

" 编译器生成的标识符arrayindex编译器生成的标识符不同,这些标识符与增强for语句发生时的范围内的任何其他标识符(编译器生成的或其他标识符)不同." (稍微解释变量名称).

所以是的:订单绝对保证.



2> vladr..:

请参阅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节)中的任何其他标识符(编译器生成的或其他标识符)不同.



3> Peter Lawrey..:

它在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
}

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有