黑马程序员技术交流社区

标题: i =++i;与i=i++;的区别(经典问题) [打印本页]

作者: 廖理    时间: 2012-5-3 13:28
标题: i =++i;与i=i++;的区别(经典问题)
本帖最后由 廖理 于 2012-5-3 13:33 编辑

i =++i;与i=i++;的区别
int i = 0;
i = i++;
System.out.println(i);
上面的程序会输出什么?

大部分会说是 1,是也,非也。运行时正确结果为0。
i=++i;相当于以下二个语句(编译时出现警告,与i=i;警告相同):
i=i+1;
i=i;
i = i++;相当于以下三个语句:
int tmp = i;
i = i + 1;
i = tmp;
下面看看下面程序片段:
int i = 0, j = 0, y = 0;
i++;//相当于:i=i+1;
System.out.println("i=" + i);// i=1
++i;//相当于:i=i+1;
System.out.println("i=" + i);// i=2
i = i++;//相当于:int tmp=i;i=i+1;i=tmp;
System.out.println("i=" + i);// i=2
i = ++i;//编译时出现警告,与i=i;警告相同。相当于:i=i+1;i=i;
System.out.println("i=" + i);// i=3
j = i++;//相当于:int tmp=i;i=i+1;j=tmp;
System.out.println("j=" + j);// j=3
System.out.println("i=" + i);// i=4
y = ++i;//相当于:i=i+1;y=i;
System.out.println("y=" + y);// y=5
System.out.println("i=" + i);// i=5
作者: kevindavid    时间: 2012-5-3 13:47
哥们!我相当的无语了!这个在九期都不知道出现几次了
1就是一个先加和后加的问题i=+1先加1再赋值i=1++先赋值再加1
作者: 黄业凌    时间: 2012-5-3 14:16
嗯 不错
作者: —__    时间: 2012-5-3 14:24
按照毕向东老师的说法 i =i++ 就是先出去玩 在回来吃饭 i =++i 就是先吃饭在出去玩{:soso_e101:}猪真肥{:soso_e120:}
作者: 李培辉    时间: 2012-5-3 14:30
i++就是先取值后增加1,++i就是先增加1后取值
作者: 徐慧书    时间: 2012-5-3 14:33
i = 10 只要程序中出现 i++ 那代码中运算先 取i本身的值,也就是10,进行运算,运算完后再 i= i + 1,那么这时候i = i + 1  等于11了
而 ++i   便是程序语句中出现++i  则是 先运算i = i + 1 ,那么i= 11,然后再 把这个i带入程序进行运算
列子:  int i = 10 ,a;
第一种情况: a = i++; 那么a=10;
第二种情况: a = ++i; 那么a=11;
这些是基础问题,需要多看看书
作者: 韩慧阳    时间: 2012-5-3 14:36
i++是先运算后赋值,++i是先赋值后运算嘛~~
作者: 丁桂松    时间: 2012-5-28 16:36
假设你是单身,结婚前你无子女,你与一个妹子结婚了,假设你这辈子注定必须有一个孩子,再假设你结婚以后的老婆不出轨.
那么 ++1的意思是,你老婆再结婚以前有个孩子,然后你结婚了然后你有了1个孩子. 1++的意思是你老婆结婚前是没孩子的,结婚以后你们有了1个孩子了.
++再前++1是结婚前有了孩子,所以你结婚的那天就获得一个老婆一个孩子.              得到了2(个人)
++在后1++是结婚以后你们才有了孩子,所以你结婚的那天你只得到了一个老婆      得到了1(个人)
但是不管你是结婚以后有了孩子还是结婚之前有了孩子,你自己都会得到一个老婆和一个孩子..
作者: 闾丘日月    时间: 2012-5-28 23:42
这种问题不能说是经典,我感觉是很蛋疼的问题。




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