Java在整数数组中循环

Java在整数数组中循环,java,arrays,Java,Arrays,考虑以下Java代码: int[] array = {1, 2, 3, 4, 5, 6}; for(int i : array) { System.out.print(i + " "); } 上面的代码显然打印了数组的内容 123445 我的问题是为什么Java不允许这样做 int[] array = {1, 2, 3, 4, 5, 6}; int i; for(i : array) { System.out.print(i + " "); } 编辑: 当我编译第二个程序时,

考虑以下Java代码:

int[] array = {1, 2, 3, 4, 5, 6};
for(int i : array) {
    System.out.print(i + " ");
}
上面的代码显然打印了数组的内容

123445

我的问题是为什么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

显示的错误是什么?也许您应该初始化变量:

int i = 0;

您正在对循环使用“增强的”。这是Java 1.5之后提供的一个特性。增强for循环的语法是

for(Object obj : List) {
    ...
}
如果以其他格式写入,则会引发编译错误。基本上,您编写的代码在语法上是不正确的。这将是一个编译错误

你可以参考
因为Java强制您在此处声明变量。使用以下语法为循环定义增强的

增强声明:

for ( {VariableModifier} UnannType VariableDeclaratorId : Expression ) Statement
增强的声明不受限制:

for ( {VariableModifier} UnannType VariableDeclaratorId : Expression ) StatementNoShortIf
unnantype
是所声明变量的类型

它接着指出,这样一个增强的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
}
T[]#a=表达式;
L1:L2:。。。Lm:
for(int#i=0;#i<#a.length;#i++){
{VariableModifier}TargetType标识符=#a[#i];
陈述
}

很明显,该变量是循环中本地声明的变量。

原语自动初始化为“0”。
for
-循环也会立即更改该
int
的值,因此初始化该变量不会改变任何内容。@GiantTree否,局部变量不会自动初始化。但是是的,这在这里并不重要。Main.java:14:error:for循环的初始值设定错误(i:array){^1 error你得到的错误是什么?@Rüdigerrmann:那篇文章根本没有解决他的问题——它只涵盖了
Iterable
接口,特别是忘记了
实现它。它的链接也没有提到它,尽管它们的所有示例都与他的第一个版本匹配,但它们不排除h是第二个。我明白。我只是试图理解语法背后的基本原理。这就是语法。这就是它的方式。否则java怎么知道给定列表所需要的呢object@ParthaBisoi从最初的问题中,Java可以从初始变量声明中推断类型——int i;for(i:array){.i被声明为整数