黑马程序员技术交流社区
标题:
小问题 int i = 0; i = i++; 结果还是0 为什么?
[打印本页]
作者:
939676244
时间:
2013-9-25 13:11
标题:
小问题 int i = 0; i = i++; 结果还是0 为什么?
本帖最后由 939676244 于 2013-9-27 15:50 编辑
如题 int i = 0; i = i++; 结果还是0 为什么? 看了半天还是不理解, 只是记住结果了
作者:
落木萧萧
时间:
2013-9-25 13:22
本帖最后由 落木萧萧 于 2013-9-25 14:25 编辑
自加运算是这样的:i++意思是先将i声明初始化为0(int i=0),然后将将i赋值为i(i=i++),这里的i自加,是先赋值,先把i的值赋给别人,自己再累加一次,所以最后输出的i自然还是最初始的i,即0;
所以不能如果i=i++,但是i=++i,这样是可以的。
作者:
939676244
时间:
2013-9-25 13:30
public class Test123 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int i= 0 ;
i = i++;
System.out.println(i);
}
}
作者:
黑色海
时间:
2013-9-25 13:39
本帖最后由 黑色海 于 2013-9-25 13:40 编辑
优先级问题,i++是基本运算符,直到输出的时候i中存储的还是0.
System.out.println(i++); 也是0.
只能说运算的时候,i中的值一直都是0,更深的解释,就不知道了
作者:
张慧
时间:
2013-9-25 14:18
int i = 0;
i = i++;
这个过程应该是i先在内存中开辟一个临时空间用来存储i的值0,随后i再加1,i就变成1,最后再将临时的值赋给i,那么i的值就又被0给替换掉了。
如果是i= ++i的话,就是i先加1,在保存到临时的空间中,最后再将临时的值赋给i。如果没有"="号的话,也就没有赋值了,++i和i++的区别就不用多说了。
作者:
yting_xmei1129
时间:
2013-9-25 17:11
饿先说一下++i与i++的区别吧!
1.在单独使用的时候i++ 和++i效果相同如 i++; 或++i;一样。
2.要是放在执行语句中时,两个的意义就不一样了如 while(i++<6)意思是先执行后运算,也就是先判断i<6后再i=i+1;相反while(++i<6)意思是先运算后执行,也就是先i=i+1后判断i<6;这里有个自己的记忆方法, ++在后则后运算(如i++<6)++在前则先运算 (如++i<6)
不知道这样能理解了没.
再来说下你这个问题
int i = 0;
i = i++;
这里 执行 i = i++; 的时候,先执行 i++ ,这属于先运算,后自加,这时候 i=0, i = i++; 的值也为0,然i再增加,i为2,这是属于隐藏的执行代码了,看来饿的表达能力有陷,不知道楼主明白了没有
希望可以帮到楼住...
作者:
王清华0
时间:
2013-9-25 17:50
很简单,楼上给你解释过i++和++i的区别了,其实这里最重要的一个问题是,i++的自增加一的执行是在=赋值之前还是之后。
public class Test123 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int i= 0 ;
i = i++;
System.out.println(i);
int a=0;
a++;
System.out.println(a++);
}
}
复制代码
运行结果是:
0
1
事实上i++的自增加一的执行是在=赋值之前的,也就是说,在赋值表达式右侧有变量使用i++这种右++的话,会在赋值之前完成自增加一,然后赋值,如果赋值表达式左侧有该变量,会造成难以预测的结果。
这句话:i=i++ 可以分成三步来看。
第一步,求表达式右侧的值,由以上程序证明,i++的值为0,此时赋值表达式右侧的值已经定下来了,是0。该值存于一个匿名的临时变量中。
第二步,完成i++的自增加一运算。此时i=1了。
第三部,完成赋值,i重新被匿名的临时变量赋值为0。
不知道这么说楼主理解么。
作者:
落木随风
时间:
2013-9-25 20:34
i=i++ 这个有运算符优先级 = 优先于 后++ 也就是说 i 将自己的值赋给 i之后 才会自加一 这个时候i=i++ 左边的i=0,右边i++=1,
例如 继续下面输入i= i++ +i++ +i++ 这个时候 左边i= 6 右边 分别为 2 3 4 这个6其实就是 1 + 2 + 3 这个时候楼主发现规律了吗?如果没有 你就在下面继续输入 上面的内容。还有个事i=++i 这个时候显示的就是1了,这是因为前++的优先级大于= 因此当i自加一以后才赋值给i 如果后面继续i=++i + ++i + ++i 这个时候就是 9 = 2+3+4 了。楼主可以多这样试几次就慢慢懂了。
作者:
sergio
时间:
2013-9-25 20:58
看下优先级吧。=和++的优先级吧
作者:
于振发
时间:
2013-9-26 00:41
++ 是自加一,如果是前加加++i那么代表在参与运算前先把值加1,然后进行运算,如果是后加加i++,那么是在运算过后在把i的值加1
作者:
939676244
时间:
2013-9-26 08:41
王清华0 发表于 2013-9-25 17:50
很简单,楼上给你解释过i++和++i的区别了,其实这里最重要的一个问题是,i++的自增加一的执行是在=赋值之前 ...
已经理解了 谢谢
作者:
Simple_love
时间:
2013-10-2 19:29
上面的解释的很清楚, 但是有一点,我补充一下, 假如int i=0 int j=i++,这时打印i和j的值。j的值会是0这里不需要我多解释,上面已经介绍很清楚, 但是i的值就是1,因为i++这时i的已经加自增加一,而j的值是把没有自增加1的i赋给j, 所有为0 ,这紧紧是个人理解, 不足的地方希望大家提议,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2