Java循环遍历整数数组

Arp*_*t M 0 java arrays

请考虑以下Java代码:

int[] array = {1, 2, 3, 4, 5, 6};
for(int i : array) {
    System.out.print(i + " ");
}
Run Code Online (Sandbox Code Playgroud)

上面的代码显然打印了数组的内容.

1 2 3 4 5

我的问题是为什么Java不允许这样做?

int[] array = {1, 2, 3, 4, 5, 6};
int i;
for(i : array) {
    System.out.print(i + " ");
}
Run Code Online (Sandbox Code Playgroud)

编辑:当我编译第二个程序时,我收到以下错误:

Main.java:14: error: bad initializer for for-loop
        for(i : array) {
            ^
1 error
Run Code Online (Sandbox Code Playgroud)

rge*_*man 9

因为Java强制你在这里声明一个变量.的JLS,第14.14.2,定义了增强的for语法循环:

EnhancedForStatement:

for ( {VariableModifier} UnannType VariableDeclaratorId : Expression ) Statement
Run Code Online (Sandbox Code Playgroud)

EnhancedForStatementNoShortIf:

for ( {VariableModifier} UnannType VariableDeclaratorId : Expression ) StatementNoShortIf
Run Code Online (Sandbox Code Playgroud)

这UnannType是声明变量的类型.

它继续说明这样一个增强的for循环相当于这个,用于循环Iterables ...

for (I #i = Expression.iterator(); #i.hasNext(); ) {
    {VariableModifier} TargetType Identifier =
        (TargetType) #i.next();
    Statement
}
Run Code Online (Sandbox Code Playgroud)

......对于数组......

T[] #a = Expression;
L1: L2: ... Lm:
for (int #i = 0; #i < #a.length; #i++) {
    {VariableModifier} TargetType Identifier = #a[#i];
    Statement
}
Run Code Online (Sandbox Code Playgroud)

很明显,变量是循环内部的本地声明变量.