i++和++i

i++和++i的详细讲解

1、什么是“++”

“++”是一个复合赋值运算符,相当于给变量进行了加一这样的操作。i++或++i就相当于i=i+1.相信这个大家也很容易理解,简单说就是进行了一个小小的简化。

2、i++和++i的区别

(1)赋值顺序不同

++ i 是先加1后赋值,而i ++ 是先赋值后加1。也正是因为这种顺序差异,使得++i能够当作左值来使用,i++却不可。

(2)代码展示
@Test
    void test2(){
        int i=1;
        i=i++;
        //变量i的值1会先压入本地方法栈中,然后i在本地变量表中自增1变为2,最后再从栈中取出1赋值给i
        System.out.println(i);//i=1
        System.out.println("-----------------");
        System.out.println(i);//i=1
        //从左到右,i++,因为是后加加,所以i的值1会先压入本地方法栈,i自增1变为2;
//		接着++i,因为是前加加,所以i的值2会先自增为3,再压入栈中;
//		接着i++,i的值3先压入栈中,i再自增变为4;
//		接着++i,i的值4会先自增为5,再将5压入栈中;
//		最后,栈中的值1,3,3,5进行求和,赋值给a。
        int a = i++ + ++i + i++ + ++i;
        System.out.println("a=" + a + "  i=" + i);//a=12 i=5
        System.out.println("----------------");

        //因为++的优先级大于比较或赋值,所以自增总是发生在比较或赋值运算之前的!!!
        System.out.println(i);//i=5
        if(++i == i){//从左到右,左边i的值先自增,然后把自增完的值入栈,右边把i(此时i已自增)的值入栈,栈中值进行比较,相同
            System.out.println(99999);
        }
        System.out.println(i);//i=6
        if(i == ++i){//从左到右,左边i的值先入栈,右边i的值先自增再入栈,栈中值进行比较,所以i值不相同
            System.out.println(888888);
        }
        System.out.println(i);//i=7


        System.out.println("-----------------");

        System.out.println(i);//i=7
        if(i++ == i){//从左到右,左边i的值先入栈,再自增,右边i的值(此时i已自增)入栈,栈中值进行比较,不相同
            System.out.println(55555555);
        }
        System.out.println(i);//i=8

        System.out.println(i);//8
        if(i == i++){//从左到右,左边i的值入栈,右边i的值先入栈,再自增,栈中值进行比较,相同
            System.out.println(11111111);
        }
        System.out.println(i);//9

    }

下面我们从图示来说明上述代码示例

在这里插入图片描述

当执行i=1的这个操作时,将i为1线压入栈中。此时i=1

当再次执行i=i++;时,这里会将i=1压入栈中,本地变量表中的i=2,最后再从栈中取出1赋值给i,此时i=1

当执行 int a = i++ + ++i + i++ + ++i;,从做到右,线看i++,因为这里会将i=1存放入栈中,子啊本地变量表里。进行加1的操作,此i=1.(栈中的值)

当执行++i时,因为这里是后加,所以这里i=3,将i=3存放到栈中。这里i=3.

接着i++,i的值3先压入栈中,i再自增变为4;,这里i=3.

里是后加,所以这里i=3,将i=3存放到栈中。这里i=3.

接着i++,i的值3先压入栈中,i再自增变为4;,这里i=3.

接着++i,i的值4会先自增为5,再将5压入栈中,这里i=5.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值