java中的逻辑运算
我一直试图以更具体的方式实现以下条件:java中的逻辑运算,java,android,conditional-statements,logical-operators,Java,Android,Conditional Statements,Logical Operators,我一直试图以更具体的方式实现以下条件: if (x > 1) doSomething(); else { doSomethingElse(); } 要将其编码为: (x > 1) ? doSomething() : doSomethingElse(); 这根本不可能吗?并非完全通用;三元中的参数(形式上三元需要表达式)必须计算为相同的类型 如果doSomething()是void类型,则肯定不是。如果doSomething()返回void,则不可能。参考 第一个表达式必须是
if (x > 1)
doSomething();
else {
doSomethingElse();
}
要将其编码为:
(x > 1) ? doSomething() : doSomethingElse();
这根本不可能吗?并非完全通用;三元中的参数(形式上三元需要表达式)必须计算为相同的类型
如果doSomething()是
void
类型,则肯定不是。如果doSomething()
返回void
,则不可能。参考
第一个表达式必须是boolean或boolean类型,否则会发生编译时错误
第二个或第三个操作数表达式调用void方法是编译时错误。
事实上,根据表达式语句语法(§14.8),条件表达式不允许出现在可能出现无效方法调用的任何上下文中
最后,第二个和第三个操作数应计算为同一类型,JLS中也提到了如何进行此计算
p.S:为什么要对
true
或false
进行doSomething()
?这取决于返回类型。如果您这样定义void doSomething()
,那么这是不可能的。您可以这样写:
i = (x > 1) ? doSomething() : doSomethingElse();
(x > 1) ? doSomething() : doSomethingElse();
但不是直接像这样:
i = (x > 1) ? doSomething() : doSomethingElse();
(x > 1) ? doSomething() : doSomethingElse();
因为:
14.8. 表达式语句
某些类型的表达式可用分号作为语句
ExpressionStatement:
StatementExpression ;
StatementExpression:
Assignment
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
MethodInvocation
ClassInstanceCreationExpression
表达声明:
陈述表达;
语句表达式:
分配
预增量表达式
预分泌压
增加后表达
后减压力
方法调用
ClassInstanceCreationExpression
其中没有条件表达式。三元用于内联if条件。它们需要一个返回值,因为你可以这样写:
System.out.println((x > 1) ? "True" : "False");
如果使用void,则不可能更改if/else中的函数名。对于首选的符号,也没有什么“更复杂”的了。这只是你喜欢的符号。JVM中的执行是相同的,如果它编译了的话,它不会,因为它不是有效的Java代码。不是真正的问题。
i=(x>1)?doSomething():doSomethingElse()
如果第二个和第三个操作数返回void,此操作是否有效?@如果他可以声明void i,则ewidiot是代码>(所以-->不)谢谢。这就解决了问题-只是将我的方法更改为private int doSomething(),private int doSomethingElse(),然后将表达式更改为int val=(x>1)?doSomething():doSomethingElse()@用户2365568什么?我说I=…
只是为了澄清。我建议您保留原来的if-else
,除非val
有意义。我一直在考虑这个问题。val没有任何用处,在阅读代码时可能会更加困惑。