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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© (_演绎、青春 中级黑马   /  2014-6-17 21:53  /  1856 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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呢?
请大神详解。

12 个回复

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

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

感觉今天好多人问这个问题,我刚才也回答了一贴。
回复 使用道具 举报
i = i++.是先赋值了在自身加1,如果是i = ++i,就是自身先加1后在赋值
回复 使用道具 举报
int i =0;
i = i++;这句话的意思就是。i = i ,然后i再增自。
这个后自增意思就是。先附值。后自增。
所以输出时是0。
回复 使用道具 举报
i先赋值再自增
回复 使用道具 举报
这个, ++i是先给i做运算再赋值,i++是先赋值再自己做加法,所以直接把0给传下去了。
回复 使用道具 举报
刚才也百度了下这个问题,大神反编译后给的解释是
Java在执行 变量=i++;的顺序如下
1、 在执行变量赋值语句(不是常量赋值,而是例如:i = a;即赋值号后面有变量)之前,会先把i的值找个地方保存起来。即 temp = i ;
2、然后直接在i变量的空间内对值+1,i= i+1 ;
3、然后再把刚才保存起来的那个值赋给变量。 i = temp;
所以i 等于 0

点评

一般我们不找度娘  发表于 2014-6-18 00:01
回复 使用道具 举报 0 1
215041631 发表于 2014-6-17 23:55
刚才也百度了下这个问题,大神反编译后给的解释是
Java在执行 变量=i++;的顺序如下
1、 在执行变量赋值语 ...

度娘也没啥不好吧,有理有据就好。
回复 使用道具 举报
先赋值,后自增,你改成++i  在看一下,结果就是1了!
回复 使用道具 举报
问题出现在这一句i=i++;这句运算先执行i++,是i变成1,但是此时1并没有赋值给i,i=i++,i还是0
回复 使用道具 举报
崔湖尧 发表于 2014-6-17 22:00
i = i++;的操作可能相当于以下三步操作:
1) 把变量i的值取出来,放在一个临时变量里(我们先记作temp)
2) ...

谢谢哥们儿
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马