Java评估多个布尔参数是否相等

时间:2018-07-31 00:11:06

标签: 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 == childThree.val && childThree.val == childFour.val){
    doSomthing();
}

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

1 个答案:

答案 0 :(得分:4)

==运算符保持关联性,因此您的第一个表达式看起来像这样,并加上了方括号:

(((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

我建议您坚持使用普通的旧&&,因为这里没有BooleanStream,布尔值需要装箱。