2

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

for (int i = 0; i < 5; i++) // ...
for (String str = "a"; str.length() < 10; str+="a") // ...

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

4

2 回答 2

4

查看声明forJava 语言规范。您可以在循环中声明和初始化任何类型的变量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

那里的第一个示例表明您根本不需要任何变量,并且正如评论中指出的那样,您不必有任何变量ForUpdate。唯一的限制是您必须在中间有一个表达式,并且它必须是一个布尔值表达式。

顺便说一句, theForInit也可以是 a StatementExpressionList,这意味着您也可以只执行一些语句,而不是声明和初始化变量。例如,您可以这样做(但这不是一个特别有用的示例):

for ( System.out.println( "beginning loop" ; … ; … )

我想,如果主体是一个简单的函数调用,这在模拟do/while循环(如果你想这样做的话)中可能很有用:

for ( method() ; condition ; method() );
于 2013-10-13T02:38:35.130 回答
1

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

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

我刚刚尝试了您的情况,结果是

a
aa
aaa
aaaa
aaaaa
aaaaaa
aaaaaaa
aaaaaaaa
aaaaaaaaa
于 2013-10-13T02:53:24.993 回答