我运行一个三元运算符的简单示例。我想知道为什么在第二种情况下它不起作用。
class Gun
{
public int hit;
}
public class Test1 {
public static void main(String[] args) {
Gun weapon1=new Gun();
weapon1.hit=54;
String es1=new String("You killed him!. Grac!");
String es2=new String("Ops, you were noticed.");
System.out.println((weapon1.hit>50 ? es1 : es2)); //this works fine
weapon1.hit>50 ? System.out.println(es1) : System.out.println(es2); // this doesn't
}
}
毕竟,三元运算符应该与if-else语句类似,这个if-else代码运行得很好:
if (weapon1.hit>50)
System.out.println(es1);
else
System.out.println(es2);
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - not a statement at Test1.main(Test1.java:39)
如果我取消注释weapon1.hit>50 ? System.out.println(es1) : System.out.println(es2);
行,则会出现错误。
答案 0 :(得分:1)
条件不等于if-else语句。
来自specification for the Conditional Operator ?
:
条件运算符有三个操作数表达式。 ?出现在第一个和第二个表达式之间,并且:出现在第二个和第三个表达式之间。
第一个表达式必须是boolean或Boolean类型,否则会发生编译时错误。
第二个或第三个操作数表达式是void方法的调用是编译时错误。
答案 1 :(得分:1)
Java中的三元运算符需要表达式,而System.out.println
是一个语句。
ConditionalExpression:
ConditionalOrExpression
ConditionalOrExpression ? Expression : ConditionalExpression
您可以找到文档here。