Java 对原语的迭代顺序是否精确定义?
示例代码:
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]
有可靠的参考吗?
示例代码:
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.iterator() 的类型。增强的 for 语句等效于以下形式的基本 for 语句:
for (I #i = Expression.iterator(); #i.hasNext(); ) { VariableModifiersopt Type Identifier = #i.next(); Statement }
其中 #i 是编译器生成的标识符,它与在发生增强 for 语句时作用域 (§6.3) 中的任何其他标识符(编译器生成的或其他标识符)不同。