A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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
复制代码



8 个回复

倒序浏览
不对啊,按你这个结果来看第一步i=i++;结果应该分两步,i=i此时i=0,i++,此时i=1;
第二步i=++i;分两步,++i,此时i=2,i=i,此时i=2;
不行你在eclipse里debug一下看看变量是怎么变化的;
回复 使用道具 举报
++自增在前:比如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的值,
回复 使用道具 举报 1 0
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么
回复 使用道具 举报 1 0
b =a++;相当于 temp = a+1;b=a;a=temp;
回复 使用道具 举报
landmine 发表于 2015-8-11 16:26
原来如此,也就是说i= 0;i = i++中 i被放到一个临时内存空间中此时值为0,然后自增1值为1,但是之后把临 ...

是这个道理,先赋值后再自增,就不管前面那个I的事情了
回复 使用道具 举报
陈cc 中级黑马 2015-8-11 21:31:21
7#
也是看不懂。。。
回复 使用道具 举报
感谢分享         
回复 使用道具 举报
int i =1;
i = i++;//这句话相当于i=1;i=i+1;  底层从右往左执行,最后i还是等于1
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马