Java中连续!=布尔表达式含义及两组表达式的结果差异问询
关于Java连续布尔比较表达式的解惑
嘿,我来帮你把这个搞懂!当初刚接触Java布尔运算的时候,我也被这种连续的比较运算符坑过,咱们一步一步来拆解:
问题1:(b2 != b1 != b2)的含义是什么?
在Java里,!=(不等于)运算符是左结合的——也就是说,连续的!=会从左到右依次计算,而不是像数学里那样同时比较三个值是否互不相等。
所以b2 != b1 != b2的实际执行顺序是:
- 先计算左边的子表达式:
b2 != b1,得到一个布尔结果(要么true要么false) - 再用这个结果和右边的
b2做!=比较,得到最终的布尔值
简单说,它等价于(b2 != b1) != b2,而不是你可能误以为的b2 != b1 && b1 != b2(这才是判断三个值互不相等的正确写法)。
问题2:为什么(false != true != false)是true,而(true != false != true)是false?
咱们分别拆解这两个表达式的计算过程:
第一个表达式:false != true != false
按照左结合规则,分步计算:
- 第一步:
false != true→ 结果是true(因为false和true确实不相等) - 第二步:用第一步的结果
true和右边的false比较:true != false→ 结果是true
所以最终整个表达式的结果是true
第二个表达式:true != false != true
同样按左结合分步:
- 第一步:
true != false→ 结果是true - 第二步:用第一步的结果
true和右边的true比较:true != true→ 结果是false
所以最终整个表达式的结果是false
额外提醒
如果你的实际需求是判断三个布尔值互不相等(也就是三个值里没有重复),千万别用这种连续!=的写法,因为它的逻辑和你想的完全不一样。正确的写法应该是:
b1 != b2 && b2 != b3 && b1 != b3
这样才能准确判断三个值是否两两不同。
内容的提问来源于stack exchange,提问作者emsnguyen
相关产品推荐
相关产品推荐

