You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么下述布尔表达式在Java等编程语言中运行结果为false?

问题原因分析

这个结果和短路求值无关,核心是你搞错了运算符的优先级:Java 中==运算符的优先级远高于逻辑与&&,实际运算顺序和你预想的完全不同。

你预想的运算顺序

你默认逻辑与的优先级更高,认为表达式会先分别计算==左右两侧的所有逻辑运算,再做相等判断,等效于加了如下括号:

boolean result = ( (a && (b || !a)) ) == ( a && b );

代入a=false, b=false的取值:

  • 左侧a && (b || !a) = false && (false || true) = false
  • 右侧a && b = false && false = false
  • 最终false == false得到true,这是你预期的结果。

实际的运算顺序

受运算符优先级规则约束,==会比&&先执行,原表达式实际等效于加了如下括号:

boolean result = ( (a && (b || !a)) == a ) && b;

代入取值分步计算:

  1. 先计算最内层括号a && (b || !a):a为false,逻辑与触发短路,直接得到结果false
  2. 再计算相等判断false == a:a为false,得到结果true
  3. 最后计算逻辑与true && b:b为false,得到最终结果false,和你实际运行的输出一致。

补充说明:你在其他编程语言中测试得到相同结果,是因为绝大多数主流语言(C、C++、Python、JavaScript等)都遵循==优先级高于&&的设计,这个现象是通用的运算符优先级规则导致的,和语言特性、短路求值都没有关系。

内容的提问来源于stack exchange,提问作者Mr. Weber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:24:04