Java自增自减运算符必须作用于可修改的变量,其核心区别在于表达式返回值(i++返原值,++i返新值),禁止单表达式多次修改同一变量,独立使用时优先选i++。

Java 中自增(++)和自减(--)运算符看着简单,但一写进表达式就容易出错——不是结果不对,就是逻辑难懂、调试费劲。避开这些坑,关键不是死记规则,而是理解「它返回什么」和「它能用在哪儿」。
只对变量使用,别碰常量、表达式或 final
自增自减操作的对象必须是「可修改的左值」,也就是内存中真实存在的、有地址的变量。
- ✅ 正确:int x = 10; x++;、arr[0]++;、list.get(i)++(前提是 list 存的是基本类型包装类且 get 返回可变引用)
- ❌ 错误:5++、(a + b)++、Math.abs(x)++、final int y = 3; y++;
编译器会直接报错:unexpected type: required: variable, found: value。看到这个提示,先检查操作数是不是一个“能被赋值”的东西。
参与表达式时,分清「返回值」不是「执行时机」
很多人说“++i 是先加后用,i++ 是先用后加”,这容易误解为「执行顺序不同」。其实两者都会改变量值,区别只在于整个表达式的计算结果:
立即学习“Java免费学习笔记(深入)”;
- i++ 这个表达式的值,永远是 i 自增前的值;
- ++i 这个表达式的值,永远是 i 自增后的值。
比如:
int i = 5;<br> int a = i++; // a = 5,i 变成 6<br> int b = ++i; // i 先变成 7,b = 7
再看经典陷阱:int i = 5; i = i++; 结果 i 还是 5 —— 因为 i++ 表达式的值是 5,赋值完才把 i 加到 6,但马上又被 5 覆盖了。
别在同一个表达式里多次修改同一变量
像 i++ + ++i 或 i++ + i++ 虽然语法合法、行为确定(JVM 规范定义了从左到右求值),但可读性差、易错、难维护。
- 例如:
int i = 3; int j = i++ + ++i + i--;得到 j=11、i=3,但没人想靠心算验证 - 建议拆成多步:
int j = i; i++; j += i; i++; j += i; i--;逻辑清晰,也方便断点调试
IDE 通常会警告这类写法,不是因为它错,而是因为它危险。
单独使用时,选 i++ 还是 ++i?优先用 i++
如果只是写在 for 循环末尾、或独立语句(如 i++;),二者完全等价,字节码几乎一样。
- for (int i = 0; i
- 但
i++更符合直觉和社区习惯,多数人一眼认出这是“常规自增” - IDE 常对
++i;提示 “redundant prefix increment”,属于风格提醒,非错误
除非你刻意需要前置效果(比如传参时要传新值),否则不用强行替换。


















