举个栗子:以下表达式的x和y的结果?
int x=1,y;
y=(x++)+(++x)+(x++);
1.先贴出答案
如果知道为什么,那就不用我在这儿掉书袋了,这是我在问答的一次案例:
2.一步步的拆分
我们知道代码的执行顺序是从左往右,从上往下的。将表达式也这样拆分
第一步 | 第二步 | 第三步 |
---|---|---|
x++ | ++x | x++ |
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