前置++返回加1后的值,后置++返回加1前的值;两者均使变量自增,但表达式值不同:赋值、索引、传参时取值时机决定结果,独立语句无差异,复杂表达式建议拆分以提升可读性与安全性。

关键就看“整个表达式算出来的是什么值”——前置++返回加1后的值,后置++返回加1前的值。变量本身在两种情况下都会变,但你把它放进赋值、打印或计算里,拿到的数不一样。
赋值时最能看清区别
表达式的值直接决定右边变量接收到什么:
- int i = 5; int j = i++; → j 得到 5(i 的旧值),之后 i 变成 6
- int i = 5; int j = ++i; → i 先变成 6,j 得到 6(i 的新值)
用在数组索引或方法参数里影响下标和传参
不是“执行顺序模糊”,而是“当下用的是哪个值”很明确:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- arr[i++]:用 i 当前值当索引取元素,取完再让 i 加 1
- arr[++i]:i 先加 1,再用新值当索引——可能越界,也可能跳过原位置
- func(i++):传进去的是 i 的旧值;func(++i):传进去的是 i 加 1 后的新值
单独写一行时没区别,但别因此误判逻辑
像 i++; 和 ++i; 这样独立成句,确实都只让 i 加 1,字节码也基本一致。IDE 甚至会提示“冗余操作符”。但这不意味着可以随意混用——一旦挪进表达式,差异立刻生效。
复杂表达式容易出错,建议拆开写
比如 int y = x++ + ++x; 看似能推,实则依赖严格从左到右求值,且每一步的“返回值”必须分清:
- x 初始为 3:x++ 返回 3(x 变 4),++x 返回 5(x 先变 5),结果 y = 3 + 5 = 8
- 这种写法可读性差、易错,推荐拆成两行:y = x + (x + 1); x += 2;
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










