黑马程序员技术交流社区

标题: 自加自减小议 [打印本页]

作者: 刘云龙    时间: 2012-10-17 12:06
标题: 自加自减小议
  1. int i = 0;
  2. a = (i++) + (i++);a = (i++) + (++i);a = (++i) + (i++);a = (++i) + (++i);这四种情况结果?
复制代码
一道很经典的题,考查自加自减。之前自己也感觉很混乱,最近看了一篇分析,清楚了。
思路很简单:
1.i++,i--,这两种后缀式自增自减,先生成值,再执行运算;
2.++i,--i,这两种前缀式自增自减,先执行运算,再生成值;
  1. a = (i++) + (i++);
  2. 等价于
  3. a = i +i;
  4. i = i + 1;
  5. i = i +1;
  6. 所以结果为:a = 0;
复制代码
  1. a = (i++) + (++i);
  2. 等价于
  3. i = i + 1;
  4. a = i + i;
  5. i = i + 1;
  6. 所以结果为:a = 2;
复制代码
  1. a = (++i) + (i++);
  2. 等价于
  3. i = i + 1;
  4. a = i + i;
  5. i = i + 1;
  6. 所以结果为:a = 2;
复制代码
  1. a = (++i) + (++i);
  2. 等价于
  3. i = i + 1;
  4. i = i + 1;
  5. a = i + i;
  6. 所以结果为:a = 4;
复制代码
自减运算原理一样。
再遇到这种题,就这样分步算一下,就清楚了。



作者: 舒远    时间: 2012-10-17 12:12
你有么有做过测试,你看看结果有几个是正确的?
作者: 马良    时间: 2012-10-17 12:20
为什么我算出来,第一种情况是1.第四种情况是3呢?
作者: 马良    时间: 2012-10-17 12:50
这是用加减乘除运行的结果,求高人指点

自增自减.png (4.25 KB, 下载次数: 13)

自增自减.png

作者: 刘云龙    时间: 2012-10-17 13:06
这里我忽略了一个问题,即自增自减在C与java中的实现是不同的。以上是看了一个C的帖子总结的,看到回帖的质疑后,重新编译验证后,发现在java中是错误的。
在java中结果为:1,2,2,3.
这里涉及到自增自减在C与java中的区别:
在java中,变量在每一次被引用时,都会创建相应的对象实例,分配相应的内存区域,其中的内容不会被重写,在变量的生命周期内的每一次引用就会有一个临时的实例对象被建立,它们的值互不影响。
  1. a = (i++) + (i++);
  2. 等价于
  3. a = 0+(i++);//此时i = 1
  4. a = 0 + 1;//此时i = 2;
  5. 所以结果为:a = 1;
复制代码
  1. a = (i++) + (++i);
  2. 等价于
  3. a = 0 + (++i);//此时i = 1;
  4. i = i + 1;//此时i = 2;
  5. a = 0 + 2;
  6. 所以结果为:a = 2;
复制代码
其他俩个类似




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2