Java中的i=i++

 1 public class Demo_01 {
 2     public static void main(String[] args) {
 3         int a = 10;
 4         int b = 20;
 5         int i = 0;
 6         i = i++;
 7         b = a++;
 8         System.out.println(a);
 9         System.out.println(b);
10         System.out.println(i);
11     }
12 }

先算等号,那,ok,答案就是a=11,b=10,i 呢???

这时候,我的第一反应i=0?然后i++?那i等于1?

其实正确答案是i=0。

用比较通俗的话来解释出现这个结果的原因,我们先来解释一下b=a++

Java代码这个语句的时候,我们从表面上看是先执行等于,在执行加加操作,但是实际在运行的时候,却不是这样的。为了让我们看起来是等于号先进行了操作,在实际的运行中,会先把a的值放在一个地方,然后让a进行++的操作,这时候得到结果11,然后把11赋值给a,把之前存好的10赋值给b,也就得到了我们想要的结果。

那如果进行的是i=i+1的操作呢,同理,i现在等于0,先把0找个地方藏好,执行i++,把结果1赋值给i,然后把0找出来在赋给i,所以i的值被0覆盖掉了,也就得到了0的结果。

上面是很通俗的解释,那稍微专业一点的解释就是(只解释一下i=i++),首先,因为这时候的i值为0,所以0先进栈,然后执行0+1的操作,下一步,得到的这个结果1进栈,到这里,进栈的操作结束,然后开始给i赋值,首先1出栈,这时候i=1,紧接着0出栈,i=0,完成了i的值得覆盖。

最后总结一下的话就是b=a++这样的语句在内部执行的过程和我们考虑优先级进行的计算的步骤是不一样的,所以导致了对于i=i++结果的错误计算。

posted on 2017-08-20 14:03 大大控 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/huangbw/p/7399809.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值