黑马程序员技术交流社区

标题: 关于i++的一点疑惑,为什么i=i++没有使i自增1 [打印本页]

作者: landmine    时间: 2015-8-11 11:15
标题: 关于i++的一点疑惑,为什么i=i++没有使i自增1
本帖最后由 landmine 于 2015-8-11 16:52 编辑

自增是i++或者++i,两者的区别我也是知道的,相当于i = i+1。
  1. int i = 0, j = 0;
  2. j = i++;
  3. //此时i先赋值给j再自增1,所以 j = 0; i= 1
  4. j = ++i;
  5. // 此时i先自增1再赋值给j,所以 j = 2 ;i = 2
复制代码
但是把 j 替换成 i 后 为什么i++没有使 i 自增 1
  1. int i = 0;
  2. i = i++;
  3. //此时  i= 0,i先赋值给i再自增1,但为什么结果是0,并没有自增1
  4. i = ++i;
  5. // 此时 i = 1
复制代码




作者: 黄蒙    时间: 2015-8-11 12:41
不对啊,按你这个结果来看第一步i=i++;结果应该分两步,i=i此时i=0,i++,此时i=1;
第二步i=++i;分两步,++i,此时i=2,i=i,此时i=2;
不行你在eclipse里debug一下看看变量是怎么变化的;
作者: danniu1314    时间: 2015-8-11 13:01
++自增在前:比如a=2;b=++a;    结果就为a=3;b=3;
++自增在后:比如a=2;b=a++;    结果就为a=3;b=2;
计算机中的实际操作为:当执行b=a++;语句时,先把a放在一个临时内存空间中,然后将a自
加1,再将临时内存空间中的a赋值给b,因此b还是原来的a的值,
作者: landmine    时间: 2015-8-11 16:26
danniu1314 发表于 2015-8-11 13:01
++自增在前:比如a=2;b=++a;    结果就为a=3;b=3;
++自增在后:比如a=2;b=a++;    结果就为a=3;b=2;
计算机 ...

原来如此,也就是说i= 0;i = i++中 i被放到一个临时内存空间中此时值为0,然后自增1值为1,但是之后把临时内存空间中为0的值赋值给i,所以运行完后还是0么
作者: Wqi    时间: 2015-8-11 17:01
b =a++;相当于 temp = a+1;b=a;a=temp;
作者: danniu1314    时间: 2015-8-11 20:57
landmine 发表于 2015-8-11 16:26
原来如此,也就是说i= 0;i = i++中 i被放到一个临时内存空间中此时值为0,然后自增1值为1,但是之后把临 ...

是这个道理,先赋值后再自增,就不管前面那个I的事情了
作者: 陈cc    时间: 2015-8-11 21:31
也是看不懂。。。
作者: 落叶随尘    时间: 2015-8-11 21:39
感谢分享         
作者: 修道解厄    时间: 2015-8-11 22:54
int i =1;
i = i++;//这句话相当于i=1;i=i+1;  底层从右往左执行,最后i还是等于1




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