java中的逻辑运算

时间:2013-07-04 09:11:58

标签: java android conditional-statements logical-operators

我一直试图以更加软化的方式实施以下条件:

if (x > 1) 
 doSomething();
else {
 doSomethingElse();
}

想要编码:

(x > 1) ? doSomething() : doSomethingElse();

这根本不可能吗?

5 个答案:

答案 0 :(得分:4)

doSomething()返回void时无效。请参阅JLS 15.25

  

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

     

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

     

事实上,通过表达式语句的语法(§14.8),条件表达式不允许出现在可能出现void方法调用的任何上下文中。

最终,第二个和第三个操作数应该评估为相同的类型,JLS中也提到了如何完成此评估。

P.S:为什么你想doSomething()true false为什么?

答案 1 :(得分:2)

你可以这样写:

i = (x > 1) ? doSomething() : doSomethingElse();

但不是直接这样:

(x > 1) ? doSomething() : doSomethingElse();

因为在JLS §14.8

  

14.8。表达式声明

     

某些类型的表达式可以用分号跟随它们作为语句。

ExpressionStatement:
    StatementExpression ;

StatementExpression:
    Assignment
    PreIncrementExpression
    PreDecrementExpression
    PostIncrementExpression
    PostDecrementExpression
    MethodInvocation
    ClassInstanceCreationExpression

其中没有ConditionalExpression

答案 2 :(得分:1)

不完全一般;三元组中的参数(正式三元组需要表达式)必须评估为相同的类型。

如果doSomething()是void类型,那肯定不是。

答案 3 :(得分:0)

它取决于返回类型。如果你定义像这样void doSomething()那么它就不可能。

答案 4 :(得分:0)

三元组用于内联条件。他们需要一个返回值,因为你可以写出类似的东西:

System.out.println((x > 1) ? "True" : "False");

with void这是不可能的