黑马程序员技术交流社区

标题: 关于i++的相关问题 [打印本页]

作者: 305450674    时间: 2016-3-14 23:58
标题: 关于i++的相关问题
关于i++的赋值问题
int i = 0;
for(int j = 1;j<4;j++){
    i = i++;
}
System.out.println(i);
打印出来的结果为什么会是0。

作者: a352214075    时间: 2016-3-15 00:03
本帖最后由 a352214075 于 2016-3-15 00:12 编辑

i = i ++;
++在后面,先赋值,再自增.左边i 还是等于0

作者: huhemingtiancai    时间: 2016-3-15 00:31
这个主要是可以看做有一个隐性的变量
int x=0;
x=x++;
System.out.println(x);
第二个x=x++拆开看
等于是
int b;
x=b;
b=x++;
在调换下位置,按顺序,就是
int b;
b=x++;
x=b;
所以其实x还是不变的。
作者: 芸芸众生    时间: 2016-3-15 00:46
先把后边的i放在一个临时的空间,之后再赋值
作者: hpuie0703    时间: 2016-3-15 00:55
学习了.
作者: liu631980435    时间: 2016-3-15 08:57
号吧,我也出现过这种情况
作者: 黑小五    时间: 2016-3-15 12:14
本帖最后由 黑小五 于 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
就这么简单的事
*/
}

作者: ameanboy    时间: 2016-3-15 12:14
i++是执行完这一行再进行自加,所以相当于每次都是i=0,换成++i可以得到你想要的结果
作者: lijiy09    时间: 2016-3-15 12:46
i=i++,i如果先赋值再自增的话,那么自增后的i又赋值给谁了,还能代表i吗?
作者: flynihao53    时间: 2016-3-15 12:54
因为i=0,i的变化和j是没有关系的,所以i是等于0的,但是实际上它也被执行了3次,只不过3次的自加因为初始值为0而没有变化
作者: 翔骋丨灬公爵    时间: 2016-3-15 21:32
flynihao53 发表于 2016-3-15 12:54
因为i=0,i的变化和j是没有关系的,所以i是等于0的,但是实际上它也被执行了3次,只不过3次的自加因为初始 ...

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

这只是关于 ++ 放在变量前.和放在变量后的问题  
作者: 翔骋丨灬公爵    时间: 2016-3-15 21:33
ameanboy 发表于 2016-3-15 12:14
i++是执行完这一行再进行自加,所以相当于每次都是i=0,换成++i可以得到你想要的结果 ...

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

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

画蛇添足了
作者: wangg    时间: 2016-3-15 22:11
芸芸众生 发表于 2016-3-15 00:46
先把后边的i放在一个临时的空间,之后再赋值

什么意思,不懂!
作者: 任楚贤    时间: 2016-3-15 23:15
因为i++是先赋值后运算的
作者: flynihao53    时间: 2016-3-16 09:46
翔骋丨灬公爵 发表于 2016-3-15 21:32
你这种答案是老师教的吗?
我觉得黑马老师是不会这么教的~~~

这个题的重点确实是i++和++i的区别,但是你问的是为什么会输出0,因为i等于0,这i++和++i你是看不出变化的,我也看了楼上的那些的回复,都是在讨论i++和++i的区别,但是用i=0来讨论i++和++i你确定你能看出区别来?
作者: flynihao53    时间: 2016-3-16 09:50
翔骋丨灬公爵 发表于 2016-3-15 21:32
你这种答案是老师教的吗?
我觉得黑马老师是不会这么教的~~~

个人觉得你的问法就有问题,我第一次的答案是根据你本身提出的问题来解答的;你的问问题的说法本来就和i++、++i没有关系
作者: a670987122    时间: 2016-3-16 20:44
都是大神!
作者: Senmonfy    时间: 2016-3-16 21:29
++在后面,先赋值,再自增.
作者: 翔骋丨灬公爵    时间: 2016-3-16 23:45
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?
作者: abijiame    时间: 2016-3-16 23:59
我记得是JVM虚拟机的锅
作者: flynihao53    时间: 2016-3-17 11:13
翔骋丨灬公爵 发表于 2016-3-16 23:45
首先这问题不是我问的,我不是楼主,我只是告诉你,楼主最后那句话是说为什么打印的是0

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

你好好看一下我第一次回复吧,我第一次有句话说的是它实际上也执行了三次自加,只不过3次的自加因为初始值为0而没有变化,还有就是只要 i的初始值不等于0,最终输出的i的值都不会是初始值,至于i++和++i,你也看了,这么多人都在说,虽然说的话不一样,但是基本上都表达清楚了
作者: 梦→拼搏    时间: 2016-3-17 12:15
因为 i = i++;
作者: toxic罐头儿    时间: 2016-3-17 12:43
i=i++; i=0, 首先i讲0赋值给左边i,然后i自加1,所以最终赋值给左边i的值还是0,参与下次运算同上,最后i一直是0
作者: 赵国政    时间: 2016-3-17 13:05
i先赋值给i后 自己在自增一次
作者: zhangchao5292    时间: 2016-3-19 00:11
i 不满足for循环的条件,不执行,还是原值




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