详解int i = ++i+i++

之前一直有这种题,只知道++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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值