java int a= 'a'+5_int a =2; a+=a-=++a*a++;结果为什么等于-5

把你贴的代码,编译成jvm 字节码后是这样的:

0 iconst_2

1 istore_1

2 iload_1

3 iload_1

4 iinc 1 by 1

7 iload_1

8 iload_1

9 iinc 1 by 1

12 imul

13 isub

14 dup

15 istore_1

16 iadd

17 istore_1

18 getstatic #16

21 iload_1

22 invokevirtual #22

25 return

我大概给你解释下这里面的运行轨迹,首先第一步把常量2压入栈中,然后给a赋值a=2,然后把a的变量压入栈中,执行两次,然后变量a自增,此时a=3,然后把变量a压入栈中,执行两次,这个时候栈中的结构如下:

e42216359c3e7575dc6b425c2ad7b676.png

然后变量a自增,a=4,然后栈顶元素执行相乘操作,这个时候栈内结构如下:

cbe2d6ce2d674c32bae69d84e6a13c35.png

然后栈顶元素执行相减操作,结果如下:

bbc2fc7eacc6b9f86f9c01a2ec9fe740.png

最后执行相加操作,再赋值给变量a,此时变量a=-5,就是你打印的结果。

至于你问的这个a的问题,根据这个代码可以看的很明白,你a++和++a之后的a还是2,是因为 a这个变量在你执行++操作之前就已经压入栈中了,所以还是2。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值