奇怪的m++

来源:互联网 发布:淘宝家装模板 编辑:程序博客网 时间:2024/04/30 03:28

先是在CSDN论坛上看到这么一段代码:

  1. public class PlusTest1    
  2. {    
  3.     public static void main(String [ ] args)    
  4.     {    
  5.         int  m = 0;    
  6.         for (int i = 0; i < 100; i++)    
  7.         {    
  8.            m = m ++ ;    
  9.        }    
  10.         System.out.println(m);      
  11.     }    
  12. }    


刚开始一想,感觉应该输出是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
为验证上面的逻辑,做了如下测试代码:

 

  1. public class Test1    
  2. {    
  3.     public static void main(String [ ] args)    
  4.     {    
  5.         int m = 0;    
  6.         int n = 0;    
  7.         int s = 0;    
  8.         for (int i = 0; i < 100; i++)    
  9.         {    
  10.            m = m ++ ;    
  11.            s = n ++ ;    
  12.        }    
  13.         System.out.println(m);    
  14.           System.out.println(s);    
  15.     }    
  16. }  

输出结果:
0
99
显然我们的分析是对的。

可是,疑惑又出现了,在VC++中测试上面代码1的的逻辑,却发现输出 100
结果出乎意料。
这个问题至今还未解决!

我想应该是编译器内部处理的不同造成的吧!