由++i和i++理解操作数栈和局部变量表

本文深入探讨了Java中的预增量(++)和后增量(a++)操作符的工作原理,通过实例代码解释了它们的区别。详细分析了一条语句`int b=++a+a+++++a;`的执行过程,展示了操作数栈和局部变量表的作用。最终,代码执行结果为:a是1,a是4,b是8。理解这些细节对于提升Java编程技能至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上代码

int a = 1;
a = a++;
System.out.println("a是"+a);//以为是2,但是是1
int b = ++a + a++ + ++a;
System.out.println("a是"+a);
System.out.println("b是"+b);

结果是:

a是1
a是4
b是8

原因:
a = a++;这一句,执行步骤为:
1)操作数压栈,
2)更新局部变量表,
3)赋值
在这个例子中,对应为
1)把1这个数压到操作数栈,
2)把a的值改为2,
3)把栈里的1赋给a,因此a最后变成1
int b = ++a + a++ + ++a;这一句,
1)第一个++a,先更新a再压操作数,此时a为2,操作数栈里有一个2,
2)第二个a++,先压操作数再更新a,此时栈里进一个2,a为3,
3)第三个++a,先更新a再压操作数,此时a为4,栈里进一个4
因此b的值为2+2+4
总结:栈帧里面的操作数栈就是用来操作的数的栈(废话。。),而里面的数是怎么来的呢?那就是从局部变量表里面取出来的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值