奇怪的m++
来源:互联网 发布:淘宝家装模板 编辑:程序博客网 时间:2024/04/30 03:28
先是在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
结果出乎意料。
这个问题至今还未解决!
我想应该是编译器内部处理的不同造成的吧!
- 奇怪的m++
- linux下文本文件处理--奇怪的^M
- 在linux中文件里行尾奇怪的^M及解决
- date('Y-m-d H:i:s',time()) 好奇怪!!!
- Linux与Windows之间拷贝文件出现^M奇怪字符
- 第一章奇怪的村庄
- 奇怪的malloc问题!
- 求救!!!奇怪的现象!
- 奇怪的编译问题
- 奇怪的心情
- 各式各样奇怪的面试
- 奇怪的sizeof
- 奇怪的private类型
- 各式各样奇怪的面试
- 奇怪的问题。
- jdom奇怪的错误
- 奇怪的Gmail
- 又一奇怪的问题?
- 用C语言进行面向对象编程
- 无废话设计模式:开篇
- 冒个泡@@!
- 不要迷失在技术的海洋中
- sql server
- 奇怪的m++
- 初来乍到
- 今天的汉堡
- 如果我能对生活对百分之五的察觉
- SPI总线
- 第3讲 软件测试计划
- 一篇气死了99个老师的中学生作文
- 输入流与输出流学习1
- IT从业人员必看的10个论坛