本文详解 java 中 `--x` 与 `x + --x` 等混合表达式的执行逻辑,揭示为何 `x + --x` 输出 7 而 `--y + y` 输出 6——关键在于操作数求值顺序(从左到右)与副作用发生的时机,而非仅由运算符优先级决定。
在 Java 中,理解 --x(预递减)的行为不能仅依赖“优先级高就先执行”的直觉。虽然 -- 的优先级确实高于 +,但优先级只决定表达式结构的分组方式,不决定子表达式的求值顺序。Java 明确规定:操作数按从左到右的顺序求值(JLS §15.7),且每个操作数的副作用(如变量修改)在其被求值时立即发生。
我们以原始代码为例分析:
int x = 4, y = 4; System.out.println(x + --x); // 输出 7 System.out.println(--y + y); // 输出 6

⚠️ 注意:这不是“未定义行为”(如 C/C++),而是 Java 严格定义的确定性行为。但强烈建议避免此类写法——它违反可读性原则,易引发维护陷阱,且在复杂表达式中极易出错。
int x = 4;
System.out.print("x before: " + x + ", "); // 4
System.out.println("x + --x = " + (x + --x)); // x becomes 3 → 4 + 3 = 7
int y = 4;
System.out.print("y before: " + y + ", "); // 4
System.out.println("--y + y = " + (--y + y)); // y becomes 3 → 3 + 3 = 6int x = 4; x--; System.out.println(x + x); // 明确:3 + 3 = 6
理解这一机制,不仅解决本题疑惑,更是写出健壮、可维护 Java 代码的重要基础。