返回信息流两个代码段:
1. int i=0;
i=i++;
2. int i=0;
i=i++ + i;
它们最后的i值一个是0,一个是1.这是为什么呢?难道1中没有执行i++?但为什么在2中就执行了呢?
这是一条镜像帖。来源:北邮人论坛 / java / #14418同步于 2010/5/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
【请教】一个小问题
absolutely
2010/5/4镜像同步15 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
i++是先输出i,在自身加1。所以i = i++ = 0;
i = i++ + i的时候,i++输出还是0,但是第3个i都已经是1了,于是第一个i就等于0+1=1了。
求大牛检查我的分析....
【 在 absolutely (踏上回归之路) 的大作中提到: 】
两个代码段:
1. int i=0;
i=i++;
2. int i=0;
i=i++ + i;
它们最后的i值一个是0,一个是1.这是为什么呢?难道1中没有执行i++?但为什么在2中就执行了呢?
和运算符优先级有关的
“=”的优先级大于“后++”,所以第一个是顺序执行,也就是先执行赋值“=”,再执行i++;
第二个说实在的没看懂为什么这么写,通常是i=++i;
【 在 caomeiliang 的大作中提到: 】
: 和运算符优先级有关的
: “=”的优先级大于“后++”,所以第一个是顺序执行,也就是先执行赋值“=”,再执行i++;
: 第二个说实在的没看懂为什么这么写,通常是i=++i;
......
可是在第一段程序运行完之后再输出i的值,仍然是0啊……
【 在 AimGraduate 的大作中提到: 】
: i++是先输出i,在自身加1。所以i = i++ = 0;
: i = i++ + i的时候,i++输出还是0,但是第3个i都已经是1了,于是第一个i就等于0+1=1了。
: 求大牛检查我的分析....
: ...................
因为你正好把这个0重新赋值给了i。
如果你把
i = i++;System.out.println(i);
这两句换成
i++;System.out.println(i);
结果就是1了
【 在 absolutely (踏上回归之路) 的大作中提到: 】
: 可是在第一段程序运行完之后再输出i的值,仍然是0啊……
【 在 jmpesp 的大作中提到: 】
:
: 【 在 caomeiliang 的大作中提到: 】
: : 和运算符优先级有关的
: ...................
我说的不对吗?