Java 带值异或

Java 带值异或,java,refactoring,xor,Java,Refactoring,Xor,我想检查a是否等于一个值,b是否等于另一个值,反之亦然 比如说 (a == 3 && b == 5) || (a == 5 && b == 3) 我知道如果它是boolean变量,我可以对它们进行异或运算。检查两个值时如何实现相同的功能?您的代码没有问题,没有更简单的方法。但是,您可以省略括号,因为&&绑定比|强。请参见。考虑以下两个方程: 如果你解这个方程组, 结果表明,满足这两个方程的值对只有(3,5)和(5,3)。 您可以使用此选项用算术重写复杂的布尔值:

我想检查
a
是否等于一个值,
b
是否等于另一个值,反之亦然

比如说

(a == 3 && b == 5) || (a == 5 && b == 3)

我知道如果它是
boolean
变量,我可以对它们进行异或运算。检查两个值时如何实现相同的功能?

您的代码没有问题,没有更简单的方法。但是,您可以省略括号,因为
&&
绑定比
|
强。请参见。

考虑以下两个方程:

如果你解这个方程组, 结果表明,满足这两个方程的值对只有
(3,5)
(5,3)
。 您可以使用此选项用算术重写复杂的布尔值:

(a + b == 8 && a * b == 15)
所以不是7个布尔条件, 现在有3个布尔条件+1个加法+1个乘法。 写起来比较短,但太聪明了。
最好保留您的原始版本。

如果(a+b==8&&Math.abs(a-b)==2)
可以使用许多技巧来模拟这种情况,有些更有效,有些则效率更低。但是你想在这里模仿XOR的什么特性?为什么?@Tunaki也适用于if
a==3+Integer.MIN\u VALUE
b==5+Integer.MIN\u VALUE
@real怀疑紧凑性,很容易看出这些值必须是different@spyr03我不知道你是如何对布尔值使用xor的。您可以将
(a==true&&b==false)| |(a==false&&b==true)
替换为
!(a^b)
,但是
a!=b
更简单。
(a + b == 8 && a * b == 15)