自增自减运算符关键看“谁先动、谁后用”:单独使用无区别;赋值或参与表达式时,后缀先用后变、前缀先变后用;a = a++结果不变;复杂表达式按优先级和从左到右顺序拆解。

面试中遇到自增(++)和自减(--)运算符,关键不是背结论,而是看清“谁先动、谁后用”。核心就三句话:
单独一行用,前缀后缀没区别
如果只是 a++ 或 ++a 单独成句,结果完全一样:变量值加1(或减1)。比如:
- int a = 5; a++; → a 变成 6
- int a = 5; ++a; → a 也变成 6
这时候不参与其他计算,不存在“先用还是后用”的问题。
赋值或参与表达式时,顺序决定结果
一旦出现在等号右边、算式里或传参位置,前缀和后缀行为立刻分化:
- 后缀形式(a++ / a--):先把当前值拿出来用,再加/减1
- 前缀形式(++a / --a):先加/减1,再把新值拿去用
例如:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- int a = 5; int b = a++ + 2; → 先用 a=5 计算 5+2=7 赋给 b,再 a 变成 6 → b=7, a=6
- int a = 5; int b = ++a + 2; → 先 a 变成 6,再用 6+2=8 赋给 b → b=8, a=6
最易错的坑:a = a++
这是高频面试题。表面看是“a 加 1”,实际结果仍是原值。原因在于 JVM 执行分三步:
- 读取 a 的当前值(比如是 1),暂存为操作数
- 对 a 执行自增 → a 变成 2
- 把刚才暂存的旧值(1)赋回给 a → a 最终还是 1
同理:int a = 1; a = ++a; 结果是 2 —— 因为先自增再赋值,没有中间旧值干扰。
复杂表达式靠优先级+从左到右拆解
比如:int a = 2; int c = a + ++a * a++;
记住两点即可拆解:
- ++/-- 优先级高于 + 和 *,但结合方向是**从左到右**
- 每遇到一个 ++/--,立即按“前缀即刻改、后缀延后改”处理
逐步推:
- a 初始为 2
- 先算 ++a → a 变 3,该处值为 3
- 再算 a++ → 当前 a=3,此处值为 3,之后 a 变 4
- 表达式变成:2 + 3 * 3 = 11(注意:第一个 a 是原始值 2,还没被改过)
- 最终 a=4,c=11
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










