i++用旧值、++i用新值:i++先取当前值参与运算再自增,++i先自增再取新值参与运算;单独成句时二者效果相同,但复合表达式中顺序差异显著。

关键看“值什么时候被用”——i++ 用旧值,++i 用新值。这不是语感问题,而是 Java 明确定义的求值顺序。
i++ 是先取值、后加1
执行时分两步:先把当前 i 的值拿出来参与运算(比如赋值、计算、传参),再把 i 自身加 1。
- int i = 3; int a = i++; → a 得到 3,i 变成 4
- System.out.println(i++); → 打印的是 i 原来的值,之后 i 才 +1
- 在表达式中:int x = (i++ * 2); 若 i=5,则 x=10,之后 i=6
++i 是先加1、后取值
同样分两步:先让 i 加 1,再把加完后的结果拿去参与后续操作。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- int i = 3; int b = ++i; → i 先变成 4,b 得到 4
- System.out.println(++i); → i 先 +1,再打印这个新值
- 在表达式中:int y = (++i * 2); 若 i=5,则 i 先变 6,y=12
单独写一行时效果一样
像 i++; 和 ++i; 这样独立成句,不参与其他运算,两者都只是让 i 加 1,没有“取值”环节,所以行为完全一致。
- for 循环第三部分写 i++ 或 ++i,结果没区别
- 但若写在循环体里并用于输出或赋值,顺序差异立刻显现
容易出错的典型场景
当自增出现在赋值右边且变量本身是左值时,逻辑易混淆:
- i = i++; → 永远不改变 i:取旧值 → i+1 → 再把旧值写回 i
- i = ++i; → 等价于 i = i + 1,正常递增
- i = i++ + ++i; → 涉及多步求值顺序,建议避免,可读性差且易错
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










