Java 循环变量声明中允许的类型?

Java 循环变量声明中允许的类型?,java,for-loop,variable-declaration,Java,For Loop,Variable Declaration,我做了一些搜索,但找不到用于for循环初始化语句的有效类型列表。是否有一个固定的类型列表可用于循环变量声明的?例如,考虑下面的代码: for (int i = 0; i < 5; i++) // ... for (String str = "a"; str.length() < 10; str+="a") // ... for(int i=0;i

我做了一些搜索,但找不到用于for循环初始化语句的有效类型列表。是否有一个固定的类型列表可用于循环变量声明的
?例如,考虑下面的代码:

for (int i = 0; i < 5; i++) // ...
for (String str = "a"; str.length() < 10; str+="a") // ...
for(int i=0;i<5;i++)/。。。
对于(String str=“a”str.length()<10;str+=“a”)/。。。

第一个可行,但我认为第二个不行。是否有for循环初始化中允许的所有类型的列表?

请查看for的Java语言规范。您可以在
for
循环中声明和初始化任何类型的变量,甚至可以声明多个变量,只要它们都是相同的类型。语法中的相关产品包括:

BasicForStatement:
    for ( ForInitopt ; Expressionopt ; ForUpdateopt ) Statement

ForInit:
    StatementExpressionList
    LocalVariableDeclaration

LocalVariableDeclaration:
    VariableModifiersopt Type VariableDeclarators

VariableDeclarators:
    VariableDeclarator
    VariableDeclarators , VariableDeclarator
这意味着您可以执行以下任一操作,例如:

for ( ; … ; … )                         // no variable declaration at all
for ( int i; … ; … )                    // variable declaration with no initial value
for ( int i=0; … ; … )                  // variable declaration with initial value
for ( int i=0, j=1; … ; … )             // multiple variables
for ( final Iterator<T> it = …; … ; … ) // final variable
我想,如果主体是一个简单的函数调用,那么在模拟
do/while
循环时(如果您想这样做),这可能很有用:

for ( method() ; condition ; method() );

第二个也可以。您可以使用任何类型的for循环

 for(String str="a";str.length()<10;str+="a")
    {
        System.out.println(str);
    }

你试过第二种吗?你可以使用任何你想要的类型,没有任何限制。。你甚至可以初始化多个变量,只要它们都是相同的类型。哦,哇,我的讲师告诉我for循环中的类型有限制。。。我自己也没试过。SorryAh,那么,你的讲师应该看看Java语言规范中的对可能出现的情况有限制;多个用逗号分隔的语句,或者一个或多个变量的声明,条件表达式必须是布尔表达式,但对可以声明的变量类型没有限制。如果mod愿意,可以删除这个问题,或者干脆离开它。我不认为这是一个可怕的问题。你提出了一个有效的问题,并举例说明了你知道哪些可行,哪些怀疑不可行,并在评论中澄清了你为什么认为它不可行。也许有些语言确实限制了您可以使用的迭代变量的类型。如果有人来自这些语言中的一种,这可以帮助他们;简而言之,中间部分(Expressionopt
)必须计算为
布尔值或
布尔值,但对其他两个部分的类型没有这样的限制。@DennisMeng这是一个很好的观点。我不认为这正是OP的要求,但这是一个很好的观点。其他两部分甚至不必出现!尤其是,
for(;true;)应该是有效的。
 for(String str="a";str.length()<10;str+="a")
    {
        System.out.println(str);
    }
a
aa
aaa
aaaa
aaaaa
aaaaaa
aaaaaaa
aaaaaaaa
aaaaaaaaa