黑马程序员技术交流社区

标题: 求解(自增问题) [打印本页]

作者: (_演绎、青春    时间: 2014-6-17 21:53
标题: 求解(自增问题)
  1. class YunSuan
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int i =0;
  6.                  i = i++;
  7.                 System.out.println("i="+i);
  8.         }
  9. }
复制代码
为什么i=0呢?
请大神详解。

作者: 崔湖尧    时间: 2014-6-17 22:00
i = i++;的操作可能相当于以下三步操作:
1) 把变量i的值取出来,放在一个临时变量里(我们先记作temp)
2) 把变量i的值进行自加操作
3)把临时变量temp的值作为自增运算前i的值使用,就是给变量i赋值。
因此,经过以上三步操作以后,虽然变量i在第二步操作中进行了自增运算,但第三步操作以后又把原来的值赋给了它,故最后输出结果为0

ps,个人见解
作者: 黎志勇    时间: 2014-6-17 22:02
崔湖尧 发表于 2014-6-17 22:00
i = i++;的操作可能相当于以下三步操作:
1) 把变量i的值取出来,放在一个临时变量里(我们先记作temp)
2) ...

感觉今天好多人问这个问题,我刚才也回答了一贴。
作者: yanghu    时间: 2014-6-17 22:03
i = i++.是先赋值了在自身加1,如果是i = ++i,就是自身先加1后在赋值
作者: 小周务商    时间: 2014-6-17 22:03
int i =0;
i = i++;这句话的意思就是。i = i ,然后i再增自。
这个后自增意思就是。先附值。后自增。
所以输出时是0。
作者: 小坏坏    时间: 2014-6-17 22:06
i先赋值再自增
作者: 人心如水    时间: 2014-6-17 22:07
这个, ++i是先给i做运算再赋值,i++是先赋值再自己做加法,所以直接把0给传下去了。
作者: 215041631    时间: 2014-6-17 23:55
刚才也百度了下这个问题,大神反编译后给的解释是
Java在执行 变量=i++;的顺序如下
1、 在执行变量赋值语句(不是常量赋值,而是例如:i = a;即赋值号后面有变量)之前,会先把i的值找个地方保存起来。即 temp = i ;
2、然后直接在i变量的空间内对值+1,i= i+1 ;
3、然后再把刚才保存起来的那个值赋给变量。 i = temp;
所以i 等于 0
作者: 215041631    时间: 2014-6-18 00:08
215041631 发表于 2014-6-17 23:55
刚才也百度了下这个问题,大神反编译后给的解释是
Java在执行 变量=i++;的顺序如下
1、 在执行变量赋值语 ...

度娘也没啥不好吧,有理有据就好。
作者: yinxjfly    时间: 2014-6-18 11:17
先赋值,后自增,你改成++i  在看一下,结果就是1了!
作者: 小生    时间: 2014-6-18 14:22
问题出现在这一句i=i++;这句运算先执行i++,是i变成1,但是此时1并没有赋值给i,i=i++,i还是0
作者: (_演绎、青春    时间: 2014-6-19 00:07
崔湖尧 发表于 2014-6-17 22:00
i = i++;的操作可能相当于以下三步操作:
1) 把变量i的值取出来,放在一个临时变量里(我们先记作temp)
2) ...

谢谢哥们儿




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