请考虑以下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)
因为Java强制你在这里声明一个变量.的JLS,第14.14.2,定义了增强的for语法循环:
EnhancedForStatement:
Run Code Online (Sandbox Code Playgroud)for ( {VariableModifier} UnannType VariableDeclaratorId : Expression ) StatementEnhancedForStatementNoShortIf:
Run Code Online (Sandbox Code Playgroud)for ( {VariableModifier} UnannType VariableDeclaratorId : Expression ) StatementNoShortIf
这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)
很明显,变量是循环内部的本地声明变量.