关键在区分“单独使用”和“参与表达式”:单独使用时++/--前后无区别,仅改变变量值;参与赋值或输出时,前缀先增后取值、后缀先取值后增;不可用于字面量、方法调用结果、final变量等非左值。

关键在分清“单独使用”和“参与表达式”两种场景,前缀和后缀行为完全不同,混淆就会出错。
单独使用时,++ 和 -- 放前后没区别
只要不把自增/自减用在赋值、打印、函数参数等需要取值的地方,就只是单纯改变量值,前++和后++效果一致:
- int a = 10;
- a++; // a 变成 11
- ++a; // a 变成 12
- a--; // a 变成 11
这种写法常见于 for 循环末尾(i++)或 while 循环体内(count--),安全且直观。
参与赋值或输出时,返回值决定结果
一旦出现在等号右边、System.out.println() 里、方法调用参数中,就必须盯紧“先返回还是先修改”:
- int b = a++; → 先把 a 的旧值 赋给 b,再让 a 加 1
- int c = ++a; → 先让 a 加 1,再把 新值 赋给 c
- System.out.println(i++); → 打印的是 i 当前值,执行完这行 i 才变
- System.out.println(++i); → i 先加 1,再打印这个新值
不能对哪些东西用 ++/--?
它们只认“能被修改的变量”,不是所有带数字的东西都能加加减减:
- ❌ 5++ —— 字面量不可变
- ❌ Math.max(3, 4)++ —— 方法调用结果不是变量
- ❌ final int x = 8; x++ —— final 变量禁止修改
- ✅ arr[0]++ —— 数组元素是变量
- ✅ list.set(0, list.get(0) + 1) —— 显式更新更清晰(比直接 ++ 包装类安全)
循环和条件中要格外小心
把自增塞进 while 或 if 的判断里,容易搞不清执行次数和边界:
- while (i++ → i 从 0 开始,循环体执行 10 次,但退出时 i 是 10(不是 9)
- if (flag--) { ... } → flag 原来是 1,进入块后变成 0;原来是 0,先取 0(false),再变 -1
- 建议:把自增/自减单独成行,逻辑更直白,也方便调试
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











