StatementExpressionList

StatementExpressionList

为什么以下代码给我一个错误?

int n = 30000; // Some number
for (int i = 0;
     0 <= n ? (i < n) : (i > n);
     0 <= n ? (i++) : (i--)) { // ## Error "not a statement" ##
    f(i,n);
}

最佳答案

这是因为for循环已在Java Language Specification中以这种方式定义。

14.14.1 The basic for statement

BasicForStatement:
    for ( ForInit ; Expression ; ForUpdate ) Statement

ForStatementNoShortIf:
    for ( ForInit ; Expression ; ForUpdate ) StatementNoShortIf

ForInit:
    StatementExpressionList
    LocalVariableDeclaration

ForUpdate:
    StatementExpressionList


StatementExpressionList:
    StatementExpression
    StatementExpressionList , StatementExpression

因此它必须是一个StatementExpression或多个StatementExpression,并且StatementExpression定义为:

14.8 Expression statements
StatementExpression:
    Assignment
    PreIncrementExpression
    PreDecrementExpression
    PostIncrementExpression
    PostDecrementExpression
    MethodInvocation
    ClassInstanceCreationExpression
0 <= n ? (i++) : (i--)都不是,因此不被接受。 i += ((0 <= n) ? 1 : -1)是一个分配,因此可以正常工作。

07-27 13:41