我正在实现一棵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();
}
,这个有效。但是我无法理解为什么第一次评估没有给我正确答案。
答案 0 :(得分:4)
==
运算符保持关联性,因此您的第一个表达式看起来像这样,并加上了方括号:
(((childOne.val == childTwo.val) == childThree.val) == childFour.val)
在这种情况下,上述情况将成立,但并非所有四个值都相同:
另一种方法:
Stream.of(childOne.val, childTwo.val, childThree.val, childFour.val)
.distinct().count() == 1
我建议您坚持使用普通的旧&&
,因为这里没有BooleanStream
,布尔值需要装箱。