考虑以下代码:
int x = 0;
for(System.out.println("Confuse!"); Math.random()>0.5; x--)
{
}
我对如何编译此代码感到疑惑(实际上打印出“混淆!”)。这背后的解释是什么?是不是在for循环中有for(initial; condition; increment)?我们不应该在那里定义一个int变量吗?还是那真的不重要,发起可以是什么?
事实上,在1日的部分for
环路的初始化部分,不束缚你有没有只初始化表达式。您可以在那里有任何有效的表达式。例如,您甚至可以在此处给出一个增量表达式,如下所示:
int i = 0;
for (++i; i < 10; i++) {
}
1个第一部分仅执行一次。它可以初始化i
为0
。但是我们已经在外面做过了。在这里,我们只增加i
了1
。
有关更多详细信息,请参见JLS§14.14.1-基本for
声明:
BasicForStatement:
for ( ForInitopt ; Expressionopt ; ForUpdateopt ) Statement
ForStatementNoShortIf:
for ( ForInitopt ; Expressionopt ; ForUpdateopt ) StatementNoShortIf
ForInit:
StatementExpressionList
LocalVariableDeclaration
ForUpdate:
StatementExpressionList
StatementExpressionList:
StatementExpression
StatementExpressionList , StatementExpression
作为说明,所述ForInit
部分可以是有效的列表表达,或一个局部变量声明。不能两者兼有。方法调用是一个有效的表达式,因此在这里它是完全有效的语法。请参见JLS§14.8-表达式语句
这是一个表示表达式列表的更令人困惑的示例:
for (System.out.println("World"),System.out.println("Hello"); i < 10; i++) { }
您是否注意到2个打印语句用逗号分隔?那是一个有效的for
声明。它将打印"World"
,然后是"Hello"
。
现在,您可以尝试将局部变量声明,打印语句或增量语句放到那里,您会发现它失败了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句