博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
详解int i = ++i+i++
阅读量:3950 次
发布时间:2019-05-24

本文共 512 字,大约阅读时间需要 1 分钟。

之前一直有这种题,只知道++i,运算前加1,i++运算后加1,但具体他是怎么实现的起始一直不太清除,今天闲来无事,通过翻看字节码,彻底将这类题映在脑子里。

先上代码

int i = 1;        i = ++i+i++;

此时i的值是多少呢?在之前遇到这种题的时候,很多时候我都是靠猜得到答案,今天通过翻看指令,总算理解了它的过程。

指令

0 iconst_1	将int型为1的变量压入栈 1 istore_1	将栈顶的int型存入第二个本地变量 2 iinc 1 by 1	将局部表中的位置的变量按常量1增加 第一个1代表索引,第二个1常量 5 iload_1	将局部表中的位于1位置的变量压入栈 6 iload_1	 7 iinc 1 by 1	将局部表中的位置的变量按常量1增加 第一个1代表索引,第二个1常量10 iadd	将栈顶的两元素相加存放在栈顶11 istore_1 将栈顶的int型存入第二个本地变量12 return

由此可见,当代码运行时,++i的操作是在变量写入栈之前对局部变量进行加1操作,i++操作是在局部变量被压入栈之后再对局部变量中的变量进行加一操作。所以最后答案,我们可以得出i=4。

转载地址:http://wfwzi.baihongyu.com/

你可能感兴趣的文章
设计模式——责任链模式详解
查看>>
设计模式——适配器模式详解
查看>>
设计模式——装饰模式详解
查看>>
Android开发——关于RxJava的知识总结
查看>>
Android开发——View的生命周期总结
查看>>
Android开发——Protocol Buffer的使用(比XML、Json快很多)
查看>>
Android开发——Android系统启动以及App启动过程
查看>>
Android开发——简述RxJava框架的实现原理
查看>>
Android开发——今日头条APK瘦身之路
查看>>
Android开发——使用ActivityLifecycleCallbacks监控App是否处于后台
查看>>
Android开发——Protocol Buffer效率之高的原理介绍
查看>>
Android开发——贝塞尔曲线解析
查看>>
Android开发——微信Android架构历史
查看>>
Android开发——ListView的复用机制源码解析
查看>>
Android开发——WebView轻量缓存优化
查看>>
Android开发——Android7.0的适配注意点小结
查看>>
Android开发——架构组件LiveData源码解析
查看>>
IDEA常用快捷键整理
查看>>
【Vue】两个元素同一行显示
查看>>
XXL-Job使用
查看>>