变量自增的原理:i++和++i
知识前景:在java虚拟机的运行时数据中有一块地方叫虚拟机栈,每个线程独有。栈中存放一个一个栈针,每个栈针对应程序中的一个方法,若有main方法则位于最底层。栈针中有一个局部变量表:记录局部变量;和一个操作数栈:便于执行指令操作。
i++和++i的操作不同于其他的赋值和加减乘除等操作,它是直接在局部变量表中操作,赋值和加减乘除需要使用到操作数栈。
int i = 10;
int i = i++;
在执行i = i++这行代码时,会先将i的值10放入操作数栈,然后将局部变量表中的i加1,最后将操作数栈中的值出栈并赋给局部变量表中的i,总共有如下三步:
所以结果为i = 10。
int i = 10;
int i = ++i;
在执行i = ++i这行代码时,会先将局部变量表中的i加1,然后将i的值11放入操作数栈,最后将操作数栈中的值出栈并赋给局部变量表中的i,总共有如下三步:
所以结果为i = 11。
所以只要记住这两种操作,无论什么组合都可以轻易得出答案。如
int i = 10;
int i = i++ + ++i;
总共有如下几步:
- i++操作先将局部变量表中的10放入操作数栈,然后将局部变量中的i加1变为11;
- ++i操作先将局部变量中的i加1变为12,然后将局部变量表中的12放入操作数栈;
- 将操作数栈中的10和12相加得到22,赋值给局部变量表中的i。
所以结果为i = 22。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章