先是在CSDN论坛上看到这么一段代码:
- public class PlusTest1
- {
- public static void main(String [ ] args)
- {
- int m = 0;
- for (int i = 0; i < 100; i++)
- {
- m = m ++ ;
- }
- System.out.println(m);
- }
- }
刚开始一想,感觉应该输出是99.后来别人都说是0,我不信,运行了一下,真的是0
疑惑! 这么会是0了,后来找了同学讨论了一下,刚开始都无法接受这个结果。后来还是想出了一个比较合理解释。如下:
首先要明确的是++ 的优先级绝对比=高。
关键就在 m++这个地方。若s=m++,运算逻辑如下,temp=m+1;s=m;m=temp;
但这个地方是m=m++,所以是 temp=m+ 1;m=m(此时m=0);m=temp(此时m=1);但由于++的优先级比=高,
所以 m=0 覆盖了m=1. 故不管循环多少次,m=0
为验证上面的逻辑,做了如下测试代码:
- public class Test1
- {
- public static void main(String [ ] args)
- {
- int m = 0;
- int n = 0;
- int s = 0;
- for (int i = 0; i < 100; i++)
- {
- m = m ++ ;
- s = n ++ ;
- }
- System.out.println(m);
- System.out.println(s);
- }
- }
输出结果:
0
99
显然我们的分析是对的。
可是,疑惑又出现了,在VC++中测试上面代码1的的逻辑,却发现输出 100
结果出乎意料。
这个问题至今还未解决!
我想应该是编译器内部处理的不同造成的吧!