Java 检查是否为真或假

Java 检查是否为真或假,java,comparison,logic,Java,Comparison,Logic,如果我有以下逻辑来检查正确或错误,但忽略其他逻辑,我会写: if (a) { if (b) { // do something when both true } } else if (!b) { // do something when both false } 这是用java编写的最简单的代码吗 我当然会写 if (a && b) { // do something when both true } else if (!a && !

如果我有以下逻辑来检查正确或错误,但忽略其他逻辑,我会写:

if (a) {
  if (b) {
    // do something when both true
  }
} else if (!b) {
  // do something when both false
}
这是用java编写的最简单的代码吗

我当然会写

if (a && b) {
    // do something when both true
} else if (!a && !b) {
  // do something when both false
}
但我在想,如果只使用一个if条件,而不使用其他条件,是否有可能实现这一点,例如

if (some condition) {
    // do something when both true
} else {  // <-- check! only else, no more condition
  // do something when both false
}
if(某些条件){
//当两者都是真的时候做点什么

}否则{//为我最初的XOR答案道歉-我误读了你的问题。正确答案是

这在Java中是不可能的

原因之一是布尔逻辑。当有两个逻辑A和B时,则有四种可能的状态:

A  B
0  0    << A and B are false
0  1
1  0
1  1    << A and B are true
ab

0 0答案是。如果不使用
else if
,则不能有仅在特定条件下运行的
else
子句。如果
if
子句中的条件为false,则不使用
else if
else
子句将在每次运行时运行。如果要添加其他约束(例如
a
b
都是false)如果
,则需要使用
else

使用
else没有什么错,如果
的话,它会让你的意图相当清楚:

if (a && b) {

} else if (!a && !b) {

}

有三种情况你希望以不同的方式处理——尽管有一种情况是“什么都不做”

这是实现您想要实现的目标的最经济的方法--对三种情况进行两次测试

或者,如果可以从“布尔值”或表达式返回0或1,则可以执行以下操作:

switch ( a + b )
{
    case 0:
        // Do something when both a and b are "false."
        break;

    case 1:
        // Do something -- or nothing -- when a or b are "false" and the other is "true."
        break;

    case 2:
        // Do something when both a and b are "true."
        break;
}

不,我需要两个都是真的,然后两个都是假的,所以无论我能写的第一个if条件有多复杂,都没有办法用简单的else过滤掉其他条件?事实上-因为第一个条件只能对四种可能状态中的一种为真,而所有其他状态都传递给
else
。这是无法回避的。@user1589188
if(x){..}else{..}
在语义上等同于
if(x){..}else if(!x){..}
(但不要这样写!),其中表达式
x
没有副作用(并且没有进一步的条件链接)。很抱歉在2015年发布,但在Java中不可能进行双重比较?据我所知,OP希望
a
b
都是
false
或两者都是
true
。因此
true+true
是真的,
false+false
是真的,
true+false
反之亦然。在这种情况下Java,我可以做一些类似于
(a==expectedA)=(b==expectedB)
,而不是吗?解释:如果第一个比较结果与第二个比较结果匹配,它是经过验证的。+1用于解释。我认为这是最简单/清楚的方法。我会使用它或它的变体:
if(a&&b){..}else if(!(a| | b)){
,这取决于我认为对给定的案例哪一个更清楚。但它也与原始帖子中给出的相同。
switch ( a + b )
{
    case 0:
        // Do something when both a and b are "false."
        break;

    case 1:
        // Do something -- or nothing -- when a or b are "false" and the other is "true."
        break;

    case 2:
        // Do something when both a and b are "true."
        break;
}