Java三元运算符不能编译为语句

时间:2016-06-18 21:59:26

标签: java

我运行一个三元运算符的简单示例。我想知道为什么在第二种情况下它不起作用。

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);行,则会出现错误。

2 个答案:

答案 0 :(得分:1)

条件不等于if-else语句。

来自specification for the Conditional Operator ?

  

条件运算符有三个操作数表达式。 ?出现在第一个和第二个表达式之间,并且:出现在第二个和第三个表达式之间。

     

第一个表达式必须是boolean或Boolean类型,否则会发生编译时错误。

     

第二个或第三个操作数表达式是void方法的调用是编译时错误。

答案 1 :(得分:1)

Java中的三元运算符需要表达式,而System.out.println是一个语句。

ConditionalExpression:
    ConditionalOrExpression
    ConditionalOrExpression ? Expression : ConditionalExpression

您可以找到文档here