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

Java && ||运算符优先级问题:修改参数后if判断仍返回true求助

Java if条件判断结果不符合预期问题解答

核心原因

你对条件的拆解错误,根本原因是不了解Java逻辑运算符的优先级:&&的优先级远高于||,运算时会先计算所有&&连接的表达式,再计算||连接的表达式。

条件拆解验证

表达式映射

你写的if条件可以拆分为以下几个子表达式:

  • A = sHeaderStatus.equals("1")
  • B = canChangeSupplier == 1
  • C = (sHeaderStatus.equals("10") || sHeaderStatus.equals("14") || sHeaderStatus.equals("85") || sHeaderStatus.equals("86") || sHeaderStatus.equals("87"))
  • D = hasButton
  • E = editableLineStatus
  • F = !sHeaderStatus.equals("85")
  • G = sFrom.equals("APPROVAL")

原if条件的逻辑等价于:

(A || (B && C) || (D && E && F)) || G

代入参数计算

你两次运行的公共参数取值:

  • A = true(sHeaderStatus固定为"1")
  • B = false(canChangeSupplier固定为0)
  • C = false(sHeaderStatus是"1",不在C的取值范围内)
  • D = false(hasButton固定为false)
  • G = false(sFrom固定为"REQ")

计算步骤:

  1. 先算所有&&表达式:
    • B && C = false && 任意值 = false
    • D && E && F = false && 任意值 = false(D本身是false,E取true或false完全不影响这段结果)
  2. 再算||表达式:
    • 括号内部分:A || false || false = true
    • 整体条件:true || G = true

所以不管你修改editableLineStatus为任意值,整个if条件的结果永远是true,自然会一直输出true11。

优化建议

写复杂逻辑判断时,不要依赖运算符默认优先级,主动用括号明确你想要的运算顺序,避免出现逻辑漏洞。比如如果你原本期望的判断逻辑是(A || B) && C && ...,必须给A||B加上括号才能生效。

内容的提问来源于stack exchange,提问作者Ankush Jassal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:15:03