前缀自增/自减(++i、--i)先修改变量再返回新值,后缀(i++、i--)先返回当前值再修改变量;二者在复合表达式中因求值顺序不同可能导致结果差异。

Java里的自增(++)和自减(--)运算符分前缀和后缀两种形式,它们的执行时机和返回值不同,直接影响表达式结果。理解它们的关键在于:**先算谁、返回谁、什么时候改值**。
前缀自增/自减(如 ++i、--i)
操作符写在变量前面,表示“先修改,再使用”。执行时立即对变量加1或减1,然后整个表达式的值就是修改后的新值。
- int i = 5;
- int a = ++i; → i 先变成6,a 得到6
- 此时 i 和 a 都是6
后缀自增/自减(如 i++、i--)
操作符写在变量后面,表示“先使用,再修改”。表达式先返回变量当前值,等整个表达式求值结束后,变量才加1或减1。
- int i = 5;
- int b = i++; → b 先得到5,之后 i 才变成6
- 此时 b 是5,i 是6
运算顺序与复合表达式中的行为
自增/自减属于一元运算符,优先级高于加减乘除(但低于括号和点号),结合性为从右到左。在复杂表达式中,务必注意求值顺序和副作用发生时机。
立即学习“Java免费学习笔记(深入)”;
- int x = 2, y = 3;
- int z = x++ + ++y; → 分步:x++ 返回2(x暂为2),++y 先让y=4再返回4,z = 2 + 4 = 6;最后x变为3,y为4
- 避免写
i = i++ + ++i这类未定义行为(Java虽有明确规则,但可读性差、易出错)
常见误区提醒
很多人误以为后缀操作“不立刻生效”,其实它一定会在表达式结束前完成赋值——只是返回的是旧值。JVM会确保该副作用在语句末尾前完成。
- 在
for循环中,i++和++i效果相同,因为没有用到返回值 - 在数组索引或方法参数中慎用:如
arr[i++]取的是原索引位置,arr[++i]取的是加1后的索引 - 不要依赖多个自增在单个表达式中的执行次序,即使Java有明确定义,也建议拆成多行提升可读性










