int i=0;对i=i++多次循环后为什么i结果为0

今天同事考我一个题求下面代码的结果,我以为是99,没想到运行结果是0,后来百度了下原来是java底层jvm执行方式导致的。
public class JTest {
    public static void main(String[] args) {
        int i=0;
        for (int n=0;n<100;n++){
            i=i++;
        }
        System.out.println(i);
    }
}

按网上的解释i=i++在jvm中会在变量区中存在初始变量i,然后将i拷贝一份到堆栈(暂存区),之后变量区中的i会自增1,但最后会将堆栈中的i赋值给变量区的i,并释放堆栈空间,所以i=i++得到的值是变量区中i的值即为0。(下面图可以辅助理解,不过是盗的……)

这样就可以理解原来i++底层并不是真的先赋值再自增,自增其实也是在赋值之前。

那如果是i=++i虽然结果为100在意料之中,不过还是说一下流程:

1、变量区中的i拷贝一份到堆栈(暂存区)

2、变量区i自增1

3、将变量区i赋值给堆栈i

4、将堆栈i赋值给变量区,释放堆栈空间

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值