一文理解++i和i++

举个栗子:以下表达式的x和y的结果?

int x=1,y;
y=(x++)+(++x)+(x++);

1.先贴出答案

如果知道为什么,那就不用我在这儿掉书袋了,这是我在问答的一次案例:
https://img-mid.csdnimg.cn/release/static/image/mid/ask/157476983146172.png?x-oss-process=image/auto-orient,1

2.一步步的拆分

我们知道代码的执行顺序是从左往右,从上往下的。将表达式也这样拆分

第一步第二步第三步
x++++xx++

 int x=1,y;
        //y=(x++)+(++x)+(x++);

        int m = (x++);//第一步
        System.out.println("第一步x++, m = "+m+",x="+x);
        int j = (++x);//第二步
        System.out.println("第二步++x, j = "+j+",x="+x);
        int n = (x++);//第三步
        System.out.println("第三步x++, n = "+n+",x="+x);
		
		//看这里这里,可以m+j+n 就是(x++)+(++x)+(x++)的简化
        System.out.println("结论 m+j+n="+(m+j+n));

结果:

第一步x++, m = 1,x=2
第二步++x, j = 3,x=3
第三步x++, n = 3,x=4
结论 m+j+n=7

所以验证了第一点的结果。

3.知其然,不知其所以然。为什么这样呢

先++和后++,最终这个值是每次加一,但是在赋值的时候有所不同。

这里呀

m = (x++); //这里执行了 两个步骤。1.将还没有+1的x 赋值给m。2.x自己加1
n = (++x);//这里执行了 两个步骤。1.x自己加1。2.将x 赋值给m。

在贴个图一目了然

在这里插入图片描述
细心地同学可能发现,这个的结果和博主的不一样。这是编译器的原因,也是问什么会出现在问答专区的原因。
在这里插入图片描述

请点赞,收藏。白嫖怪,请吃我一jio

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值