前置++i/--i先修改后取值,后置i++/i--先取值后修改;单独使用时等价;仅适用于可修改的左值变量。

核心区别不在“变量变没变”,而在于表达式本身的值是多少。变量本身在前置和后置情况下都会被修改,但你把它用在赋值、打印或参与计算时,拿到的数不一样。
前置(++i 或 --i):先改值,再取值
执行顺序是:先对变量做 +1 或 -1,再把修改后的值作为整个表达式的返回值。
- int i = 5; int j = ++i; → i 变成 6,j 也等于 6
- System.out.println(--i); 如果 i 原为 4,输出 3,i 也变成 3
后置(i++ 或 i--):先取值,再改值
执行顺序是:先把变量当前的值作为整个表达式的返回值,再对变量做 +1 或 -1。
- int i = 5; int j = i++; → j 等于 5,之后 i 才变成 6
- System.out.println(i--); 如果 i 原为 4,输出 4,之后 i 变成 3
单独使用时两者完全等价
写成独立语句,比如 i++; 或 ++i;,效果一样:都让 i 加 1,且不产生可被使用的返回值。
立即学习“Java免费学习笔记(深入)”;
- for 循环里的 i++ 换成 ++i 不影响逻辑
- IDE 通常会提示这是“冗余操作符”,不是错误,只是写法可简化
不能用在不可修改的位置
自增自减要求操作数是「左值」——即内存中一个可寻址、可修改的变量。
- 不允许:++5、++(a + b)、++final int x、++methodCall()
- 编译器会直接报错:not a variable / cannot assign to final variable


















