Java一行如果不适用于打印

如果你写的东西如下:

boolean condition; (...) String out = condition ? "true" : "false"; System.out.println(out); 

有用。 但如果你写

  condition ? System.out.println("true") : System.out.println("false"); 

你得到一个“非声明”的错误。 “正确”的方式是写(使用大括号或“成为或不成一行”超出了问题的范围):

  if (condition) System.out.println("true"); else System.out.println("false"); 

为什么? if s必须总是返回一行值?

编辑:大家指出这一点

  condition ? System.out.println("true") : System.out.println("false"); 

是不是一个正确的语法,是的,我得到了那一部分。 我不是要求解决方案(尽管如此)

  System.out.println(condition ? "true" : "false"); 

很好。

@Andrew Tobilko在哪里说明了什么? 这就是我感兴趣的东西。

编辑2 :接受的答案提供了我想要的。 谢谢

condition ? System.out.println("true") : System.out.println("false"); 不是声明。

从这里 :

在计算机科学中,三元运算符是一个带有三个参数的运算符。

System.out.println("true") 不符合参数,因为println()方法属于void类型。 因此,它不是一个声明。

改为使用它:

System.out.println(condition ? "true" : "false");

你的情况:

System.out.println()不返回任何值(返回void )。 三元运算符期望它的两部分返回语句。

 System.out.println(condition ? "true" : "false"); System.out.println(condition); // it's an equalent to the previous line 

规范中的一些理论:

 ConditionalExpression: ConditionalOrExpression ConditionalOrExpression ? Expression : ConditionalExpression 
  • 条件运算符在语法上是右关联的(它从右到左分组)。 因此, a?b:c?d:e?f:g表示与a?b:(c?d:(e?f:g))相同a?b:(c?d:(e?f:g))
  • 条件运算符有三个操作数表达式。 ? 出现在第一个和第二个表达式之间,并且:出现在第二个和第三个表达式之间。
  • 第一个表达式必须是booleanBoolean类型,否则会发生编译时错误。
  • 第二个或第三个操作数表达式是void方法的调用是编译时错误。

更多信息在这里 。

三元运算符应该用作:

 field = condition ? valueIfTrue : valueIfFalse; 

是的,两个可能的选项,每个都需要有一个值(如果你调用一个void方法,如System.out.println(...)则不是这种情况)。

在你的情况下你可以写:

 System.out.println(condition? "true" : "false"); 

这是不正确的语法(您的代码):

  condition ? System.out.println("true") : System.out.println("false"); 

这符合类似的目标,但具有正确的语法

 System.out.println(Condition ? "true" : "false") 

System.out.println()不是一个参数..这只是为了打印。 要实际打印,您需要有一个实际的字符串! "example" 。 并且不要忘记三元运算符需要三个参数。你的评估条件,第一个结果如果返回true,如果返回false。希望这有帮助!

句法:

 ConditionToBeEvaluated ? IfTrue : IfFalse