自增(++)和自减(--)的关键在于前缀与后缀的执行顺序:前缀(++i)先变后用,后缀(i++)先用后变;参与赋值时行为不同,如i = i++值不变,而i = ++i值加1。
Java里的
自增(++)和自减(--)不是简单的“加1”或“减1”,关键要看它出现在变量的**前面还是后面**,以及是否参与了**赋值或表达式计算**。真正容易出错的地方,恰恰就藏在“先用再变”和“先变再用”的顺序差异里。
前缀形式(++i、--i):变量先完成+1或-1,再把新值用于后续操作。
后缀形式(i++、i--):变量先把当前值拿出来用,用完之后再+1或-1。
如果只是写 i++ 或 ++i 单独成句(没有赋值、没参与运算),那它们效果完全一样:变量都加1,且不产生中间值。
最经典的陷阱是:i = i++; —— 这行代码执行完,i 的值**不变**。
JVM 对单纯自增/自减做了优化:不走操作数栈,直接在局部变量表中修改值。但一旦涉及表达式(比如 k = i++ + ++j * i),就会按规则分步处理——先取值、再计算、最后更新变量。
基本上就这些。理解清楚“谁先谁后”和“值从哪来”,就能避开90%的自增自减误区。