java i++和++i的区别

原述

之前知道i++和++i的区别:

  • i++先赋值再自增。
  • ++i先自增再赋值。

如下:

        int i=0;
        System.out.println(i++);
        System.out.println(i++);

第一个打印出0,第二个打印出1

        int i=0;
        System.out.println(++i);
        System.out.println(++i);

第一个打印出1,第二个打印出2

就是一个先满足别人,一个先满足自己啦

深入

当你遇到这种情况,你会认为i是打印出几?

        int i=0;
        for(int j=0;j<10;j++){
            i=i++;
        }
        System.out.println(i);

打印出0。

不是说好先赋值再自增吗?那我是不是可以这样理解先赋值给左边的i然后i再自增那岂不是打印出来的还应该是10?难道是编译器的bug?你赞同吗?

其实不是的,它应该是这样的:

1:先赋值 temp=i;
2:再自增 i=i+1;
3:再赋值 i=temp

如果按照我的理解它是这样的:

1:先赋值 i=i;
2:再自增 i=i+1;

但是编译器应该不会这样,大概是i=i没啥意义,编译器不会这样执行。或者基础变量等号赋值都是先创建一个临时变量,然后再把临时变量赋值给等号左边。

所以++i应该是这样的:

1i=i+1;
2:temp=i;
3:i=temp;

这就是执行内部的算法了,这样确实感觉安全点,但只是感觉说不出为啥(或许是怕多线程环境等号右边的值在赋值时怕修改掉了,创建临时的有利于并发),有知道的小伙伴欢迎评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值