考虑以下Java代码:
int[] array = {1, 2, 3, 4, 5, 6};
for(int i : array) {
System.out.print(i + " ");
}
上面的代码显然会打印出数组的内容。
1 2 3 4 5
我的问题是为什么Java不允许这样做?
int[] array = {1, 2, 3, 4, 5, 6};
int i;
for(i : array) {
System.out.print(i + " ");
}
编辑: 当我编译第二个程序时,我收到以下错误:
Main.java:14: error: bad initializer for for-loop
for(i : array) {
^
1 error
答案 0 :(得分:8)
因为Java强迫你在这里声明一个变量。 JLS, Section 14.14.2使用语法
定义增强的for
循环
EnhancedForStatement:
for ( {VariableModifier} UnannType VariableDeclaratorId : Expression ) Statement
EnhancedForStatementNoShortIf:
for ( {VariableModifier} UnannType VariableDeclaratorId : Expression ) StatementNoShortIf
UnannType
是要声明的变量的类型。
接着说明这样一个增强的for循环相当于这个循环Iterable
s ...
for (I #i = Expression.iterator(); #i.hasNext(); ) {
{VariableModifier} TargetType Identifier =
(TargetType) #i.next();
Statement
}
...和数组...
T[] #a = Expression;
L1: L2: ... Lm:
for (int #i = 0; #i < #a.length; #i++) {
{VariableModifier} TargetType Identifier = #a[#i];
Statement
}
很明显,变量是循环内部的本地声明变量。
答案 1 :(得分:0)
显示的错误是什么?也许你应该初始化变量:
int i = 0;
答案 2 :(得分:0)
您正在使用“增强型”for循环。这是Java 1.5之后的一个功能。增强for循环的语法是
for(Object obj : List) {
...
}
如果以其他格式编写,则会引发编译错误。基本上你编写的代码在语法上是不正确的。这将是编译错误。