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

Java中&&优先级高于||?解析短路求值致变量未自增问题

Java逻辑运算符优先级与短路求值的代码解析

我原本认为Java中逻辑与(&&)的优先级高于逻辑或(||),比如boolean b = boolExp1 || boolExp2 && boolExp3等价于boolean b = boolExp1 || (boolExp2 && boolExp3)。但测试下面的代码时,初始值为1的int变量x在执行布尔表达式后完全没变化,和我预期的x=4不符,想搞清楚是不是短路求值导致的,需要详细解析这段代码的执行过程。

测试代码

public class Main {

    public static void main(String[] args) {
        int x = 1;
        boolean b = (1<2) || (6<x++) || (++x>9) && (true^false) ^ (x++<7);
        
        System.out.println(b);
        System.out.println("x = "+ x);
    }

}

实际输出

true
x = 1

预期输出

true
x = 4

代码执行过程解析

你的优先级理解是对的:&&的优先级确实高于||,但这里的核心问题是短路逻辑或||的特性——只要||左侧的表达式结果为true,右侧的所有表达式都会直接被跳过,不会执行。

我们一步步拆解执行流程:

  1. 首先执行最左侧的(1<2),结果为true。
  2. 由于是||运算符,当第一个操作数已经是true时,整个||表达式的结果已经确定为true,所以后面的所有表达式:
    • (6<x++)
    • 以及优先级更高的(++x>9) && (true^false) ^ (x++<7)整个部分
      都不会被执行。
  3. 变量x完全没有被任何自增操作修改,始终保持初始值1,布尔变量b直接被赋值为true。

你预期x=4是假设所有涉及x的表达式都被执行了,但短路求值直接跳过了这些步骤,这就是实际结果和预期不符的根本原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:32:49