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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 305450674 中级黑马   /  2016-3-14 23:58  /  1907 人查看  /  24 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

关于i++的赋值问题
int i = 0;
for(int j = 1;j<4;j++){
    i = i++;
}
System.out.println(i);
打印出来的结果为什么会是0。

24 个回复

正序浏览
i 不满足for循环的条件,不执行,还是原值
回复 使用道具 举报
i先赋值给i后 自己在自增一次
回复 使用道具 举报
i=i++; i=0, 首先i讲0赋值给左边i,然后i自加1,所以最终赋值给左边i的值还是0,参与下次运算同上,最后i一直是0
回复 使用道具 举报
因为 i = i++;
回复 使用道具 举报
翔骋丨灬公爵 发表于 2016-3-16 23:45
首先这问题不是我问的,我不是楼主,我只是告诉你,楼主最后那句话是说为什么打印的是0

其次 不是因为i = 0 ...

你好好看一下我第一次回复吧,我第一次有句话说的是它实际上也执行了三次自加,只不过3次的自加因为初始值为0而没有变化,还有就是只要 i的初始值不等于0,最终输出的i的值都不会是初始值,至于i++和++i,你也看了,这么多人都在说,虽然说的话不一样,但是基本上都表达清楚了
回复 使用道具 举报
我记得是JVM虚拟机的锅
回复 使用道具 举报
flynihao53 发表于 2016-3-16 09:46
这个题的重点确实是i++和++i的区别,但是你问的是为什么会输出0,因为i等于0,这i++和++i你是看不出变化 ...

首先这问题不是我问的,我不是楼主,我只是告诉你,楼主最后那句话是说为什么打印的是0

其次 不是因为i = 0 所以最后打印的才是0
如果把楼主的i++ 变成++i 打印的就不是0了

当然你要说因为i = 0 所以最后打印才是0
那不管 i = 任何int范围内的值 ,用楼主的代码,打印都是第一次赋值的值

如果楼主 设置 i = 1 那最后打印还是1 楼主可能会问为什么 最后打印1 你能告诉他因为 i = 1?
回复 使用道具 举报
++在后面,先赋值,再自增.
回复 使用道具 举报
都是大神!
回复 使用道具 举报
翔骋丨灬公爵 发表于 2016-3-15 21:32
你这种答案是老师教的吗?
我觉得黑马老师是不会这么教的~~~

个人觉得你的问法就有问题,我第一次的答案是根据你本身提出的问题来解答的;你的问问题的说法本来就和i++、++i没有关系
回复 使用道具 举报
翔骋丨灬公爵 发表于 2016-3-15 21:32
你这种答案是老师教的吗?
我觉得黑马老师是不会这么教的~~~

这个题的重点确实是i++和++i的区别,但是你问的是为什么会输出0,因为i等于0,这i++和++i你是看不出变化的,我也看了楼上的那些的回复,都是在讨论i++和++i的区别,但是用i=0来讨论i++和++i你确定你能看出区别来?
回复 使用道具 举报
因为i++是先赋值后运算的
回复 使用道具 举报
wangg 初级黑马 2016-3-15 22:11:11
13#
芸芸众生 发表于 2016-3-15 00:46
先把后边的i放在一个临时的空间,之后再赋值

什么意思,不懂!
回复 使用道具 举报
ameanboy 发表于 2016-3-15 12:14
i++是执行完这一行再进行自加,所以相当于每次都是i=0,换成++i可以得到你想要的结果 ...

楼主好像没有说要得到什么结果

楼主好像问的只是为什么得到的会是0

画蛇添足了
回复 使用道具 举报
flynihao53 发表于 2016-3-15 12:54
因为i=0,i的变化和j是没有关系的,所以i是等于0的,但是实际上它也被执行了3次,只不过3次的自加因为初始 ...

{:3_49:}你这种答案是老师教的吗?
我觉得黑马老师是不会这么教的~~~

这只是关于 ++ 放在变量前.和放在变量后的问题  
回复 使用道具 举报
因为i=0,i的变化和j是没有关系的,所以i是等于0的,但是实际上它也被执行了3次,只不过3次的自加因为初始值为0而没有变化
回复 使用道具 举报
i=i++,i如果先赋值再自增的话,那么自增后的i又赋值给谁了,还能代表i吗?
回复 使用道具 举报 1 0
i++是执行完这一行再进行自加,所以相当于每次都是i=0,换成++i可以得到你想要的结果
回复 使用道具 举报
本帖最后由 黑小五 于 2016-3-15 12:28 编辑

首先int i =0;for (int j = 1;j<4;j++) {
   i = i++      
/*
i = i++;
先把他拆成     i = i  (0)            i = i + 1
从汇编语言角度来讲,是从右边开始执行
先读到i = i +1,   i = 1,       再读到 i = i 时,这(右边)的 i 还是0,然后系统又把这个 0重新赋值给了 i ,所以 i =0
就这么简单的事
*/
}

评分

参与人数 1黑马币 +2 收起 理由
洋葱头头 + 2 神马都是浮云

查看全部评分

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马