【发布时间】:2019-11-15 17:24:50
【问题描述】:
当我尝试编译以下 Java 程序时:
public class MyClass
{
static int f1() { return 10; }
static int f2() { return 20; }
public static void main(String args[])
{
int x = 10;
(x <= 10) ? f1() : f2();
}
}
我得到了错误:
/MyClass.java:9: error: not a statement
(x <= 10) ? f1() : f2();
^
Java 语言定义将语句称为赋值、递增/递减、方法调用或对象创建之一。我的错误“陈述”涉及方法调用,因此应该有效。事实上,如果我有一个像这样的声明:
f1();
编译器编译程序时不会发出任何呜咽声。同样,如果我将最后一行更改为:
int y = (x <= 10) ? f1() : f2();
那么,一切都是笨拙的。
作为最后一条信息,C 和 C++ 都没有引起注意:
(x <= 10) ? f1() : f2();
【问题讨论】:
-
“涉及”与“是”不同。您的“声明”是
?:运算符表达式。表达式不是 Java 中的有效语句(即它不是您列出的四个语句)。 C 和 C++ 做什么或不做什么无关紧要。