Java计算多个布尔参数是否相等

Java计算多个布尔参数是否相等,java,if-statement,conditional-statements,Java,If Statement,Conditional Statements,我正在实现一个N元树(这里N=4),并希望在一个节点的所有四个子节点的布尔属性val相等的情况下,加入一个逻辑来做一些事情,我尝试了: if (childOne.val == childTwo.val == childThree.val == childFour.val){ doSomthing(); } 但是,这不适用于我的测试用例,因此我必须将其更改为更明确和详细的: if (childOne.val == childTwo.val && childTwo.val

我正在实现一个N元树(这里N=4),并希望在一个节点的所有四个子节点的布尔属性
val
相等的情况下,加入一个逻辑来做一些事情,我尝试了:

if (childOne.val == childTwo.val == childThree.val == childFour.val){
    doSomthing();
}
但是,这不适用于我的测试用例,因此我必须将其更改为更明确和详细的:

if (childOne.val == childTwo.val && childTwo.val == childThree.val && childThree.val == childFour.val){
    doSomthing();
}

这一个有效。但是,我无法理解为什么第一次求值没有给出正确的答案。

操作符是左关联的,因此您的第一个表达式如下所示,并添加了括号:

(((childOne.val == childTwo.val) == childThree.val) == childFour.val)
在这种情况下,上述情况为真,但并非所有四个值都相同:

  • 孩子1和2是假的
  • 孩子3和4是真的
另一种方法是:

Stream.of(childOne.val, childTwo.val, childThree.val, childFour.val)
    .distinct().count() == 1

我建议您继续使用普通的
&&
,因为没有
布尔流
,布尔值需要装箱。

操作符是左关联的,因此您的第一个表达式看起来像这样,并添加了括号:

(((childOne.val == childTwo.val) == childThree.val) == childFour.val)
在这种情况下,上述情况为真,但并非所有四个值都相同:

  • 孩子1和2是假的
  • 孩子3和4是真的
另一种方法是:

Stream.of(childOne.val, childTwo.val, childThree.val, childFour.val)
    .distinct().count() == 1

我建议你坚持使用普通的
&
,因为没有
布尔流,布尔流需要装箱。

a==b==c
equals
(a==b==c
a==b==c
这是绝对正确的,谢谢!我用
=
对它进行了错误的处理,对于列出的所有操作符来说,这似乎也是一个很好的关联性属性参考。这是绝对正确的,谢谢!我用
=
对它进行了错误的处理,对于列出的所有操作符来说,这似乎也是一个很好的关联性属性参考。