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

Java短路运算符与其他运算符混用时的执行逻辑疑问

核心结论

运算符优先级和短路运算符的求值规则并不冲突,二者作用的阶段完全不同:

  • 优先级只负责确定表达式的分组规则,明确每个运算符对应的操作数范围,不会改变表达式的执行顺序
  • ||等短路逻辑运算符的求值顺序由Java语言规范强制规定:左操作数求值为true时,直接跳过整个右操作数的所有运算
具体代码分析

你给出的代码中,优先级规则已经正常生效:它明确了||的右操作数是完整的(++y == 1)子表达式,而不会出现优先级颠倒导致的错误分组(例如(0 == 0 || ++y) == 1这类不符合预期的分组)。
但由于||的左操作数0 == 0求值结果为true,触发了短路逻辑,整个右操作数(++y == 1)不会被执行,因此其中的++y自增逻辑也不会运行,最终y的值保持初始的0。

如果修改代码让||左操作数为false,就会触发右操作数的求值,这时候优先级的作用会更明显:

public class OperatorTest {
    public static void main(String[] args) {
        int y = 0;
        // 左操作数为false,会执行右操作数
        if(0 == 1 || ++y == 1) {
            // 省略逻辑
        }
        // 此时输出y为1,符合++优先级更高的规则
        System.out.println(y);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:45:05