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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

24 个回复

倒序浏览
本帖最后由 a352214075 于 2016-3-15 00:12 编辑

i = i ++;
++在后面,先赋值,再自增.左边i 还是等于0
回复 使用道具 举报
这个主要是可以看做有一个隐性的变量
int x=0;
x=x++;
System.out.println(x);
第二个x=x++拆开看
等于是
int b;
x=b;
b=x++;
在调换下位置,按顺序,就是
int b;
b=x++;
x=b;
所以其实x还是不变的。

评分

参与人数 1黑马币 +2 收起 理由
洋葱头头 + 2 很给力!

查看全部评分

回复 使用道具 举报
先把后边的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 神马都是浮云

查看全部评分

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

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

这只是关于 ++ 放在变量前.和放在变量后的问题  
回复 使用道具 举报
ameanboy 发表于 2016-3-15 12:14
i++是执行完这一行再进行自加,所以相当于每次都是i=0,换成++i可以得到你想要的结果 ...

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

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

画蛇添足了
回复 使用道具 举报
wangg 初级黑马 2016-3-15 22:11:11
13#
芸芸众生 发表于 2016-3-15 00:46
先把后边的i放在一个临时的空间,之后再赋值

什么意思,不懂!
回复 使用道具 举报
因为i++是先赋值后运算的
回复 使用道具 举报
翔骋丨灬公爵 发表于 2016-3-15 21:32
你这种答案是老师教的吗?
我觉得黑马老师是不会这么教的~~~

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

个人觉得你的问法就有问题,我第一次的答案是根据你本身提出的问题来解答的;你的问问题的说法本来就和i++、++i没有关系
回复 使用道具 举报
都是大神!
回复 使用道具 举报
++在后面,先赋值,再自增.
回复 使用道具 举报
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?
回复 使用道具 举报
我记得是JVM虚拟机的锅
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马