我已经完成了一些搜索,但无法找到用于for循环初始化语句的有效类型列表。是否有可以在for
循环变量声明中使用的固定类型列表?例如,请考虑以下代码:
for (int i = 0; i < 5; i++) // ...
for (String str = "a"; str.length() < 10; str+="a") // ...
第一部作品,但我不认为第二部作品。是否有for循环初始化中允许的所有类型的列表?
答案 0 :(得分:4)
查看the for
statement的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
第一个示例显示您根本不需要任何变量,而pointed out in the comments也不需要ForUpdate
。唯一的限制是你必须在中间有一个表达式,它需要是一个布尔值表达式。
另外,ForInit
也可以是StatementExpressionList
,这意味着您可以只执行一些语句,而不是声明和初始化变量。例如,你可以这样做(但这不是一个特别有用的例子):
for ( System.out.println( "beginning loop" ; … ; … )
如果正文是一个简单的函数调用,我认为这可能对模拟do/while
循环(如果你想这样做)很有用:
for ( method() ; condition ; method() );
答案 1 :(得分:1)
第二个也可以正常工作。您可以使用任何类型for for循环
for(String str="a";str.length()<10;str+="a")
{
System.out.println(str);
}
我刚试过你的方案,结果是
a
aa
aaa
aaaa
aaaaa
aaaaaa
aaaaaaa
aaaaaaaa
aaaaaaaaa