为什么以下代码会运行?

极光

考虑以下代码:

int x = 0;   
for(System.out.println("Confuse!"); Math.random()>0.5; x--)
{
}

我对如何编译此代码感到疑惑(实际上打印出“混淆!”)。这背后的解释是什么?是不是在for循环中有for(initial; condition; increment)?我们不应该在那里定义一个int变量吗?还是那真的不重要,发起可以是什么?

罗希特·贾恩(Rohit Jain)

事实上,在1的部分for环路的初始化部分,不束缚你有没有只初始化表达式。您可以在那里有任何有效的表达式。例如,您甚至可以在此处给出一个增量表达式,如下所示:

int i = 0;
for (++i; i < 10; i++) {
}

1个第一部分仅执行一次。它可以初始化i0但是我们已经在外面做过了。在这里,我们只增加i1

有关更多详细信息,请参见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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么以下代码会导致无限递归?

来自分类Dev

为什么以下代码会产生分段错误?

来自分类Dev

为什么以下代码会导致无限递归?

来自分类Dev

为什么以下代码段无法成功运行?

来自分类Dev

为什么以下代码可以编译并成功运行?

来自分类Dev

为什么以下代码无法解析?

来自分类Dev

为什么以下代码无法编译?

来自分类Dev

为什么以下代码显示错误?

来自分类Dev

为什么以下代码不终止?

来自分类Dev

为什么在python中运行以下代码片段时会打印20

来自分类Dev

无法理解为什么在运行以下代码时应用程序崩溃

来自分类Dev

为什么我在 Xcode 上收到以下代码的 (lldb) 运行时错误?

来自分类Dev

以下代码段的输出是什么,为什么?

来自分类Dev

以下代码的输出是什么,为什么?

来自分类Dev

以下代码的运行时是什么

来自分类Dev

为什么clang ++不编译以下代码?

来自分类Dev

为什么以下代码编译和执行成功?

来自分类Dev

为什么以下代码打印出10而不是null?

来自分类Dev

Sailsjs:以下代码中为什么不使用* return *?

来自分类Dev

以下代码不起作用..为什么?

来自分类Dev

为什么以下代码导致模板实例化?

来自分类Dev

为什么以下代码在C ++中是非法的

来自分类Dev

为什么以下代码给出此输出?

来自分类Dev

为什么在以下代码中出现竞争条件?

来自分类Dev

为什么我将nan作为以下代码的输出?

来自分类Dev

为什么以下代码打印5而不是6?

来自分类Dev

为什么以下代码不会引发错误?

来自分类Dev

为什么以下代码无法按预期执行?

来自分类Dev

为什么clang ++不编译以下代码?

Related 相关文章

热门标签

归档