一个有趣的问题
public class Test {
static int i = 0;
/**
* Method main
* int i = 0;
*
* @param args
*
*/
public static void main(String[] args) {
//int i = 0;
i = i++;
System.out.println(i);
i = i++;
i = i++;
System.out.println(i++);
// TODO: Add your code here
}
}
i的输出为什么是0??????
问题点数:20、回复次数:10Top
1 楼steedhorse(晨星)回复于 2005-08-04 19:43:14 得分 0
偶觉得i = i++;应该这么理解:
int tmp = i;
i = i + 1;
i = tmp;Top
2 楼interhanchi(on the Java Road)回复于 2005-08-04 19:43:54 得分 0
有什么奇怪的!
好好理解一下i++和++i的区别吧?
i++是先先生成值,再执行运算,而 ++i是恰好相反!Top
3 楼homesos(熊猫贩子)回复于 2005-08-04 19:47:43 得分 0
哇
用后缀++ 当然是这样的结果了Top
4 楼homesos(熊猫贩子)回复于 2005-08-04 19:48:55 得分 0
有没有重载过operator
前缀 与 后缀 都分不清?Top
5 楼homesos(熊猫贩子)回复于 2005-08-04 19:50:20 得分 10
int operator ++ ()//前置操作符
{
return i+1;
}
int operator ++ (int flag)//后置操作符
{
int j = i;
i += 1;
return j;
}
Top
6 楼interhanchi(on the Java Road)回复于 2005-08-04 19:57:15 得分 0
楼上的解释的好!
^_^!Top
7 楼believefym(feng)回复于 2005-08-04 21:24:00 得分 0
楼主把i=i++改成i++或者++i就会看到不同的结果了Top
8 楼alexwan(牧林:才多身子弱)回复于 2005-08-04 21:43:26 得分 0
结果,就是不一样,呵呵!Top
9 楼yhyu0107(茕子)回复于 2005-08-04 22:44:00 得分 10
如同homesos的比较专业说法,呵呵,如果理解操作符重载就很容易了。
i++,做i= i + 1 动作,但整个expression的值(返回值)是自加前的变量值;
而++i做同样的动作,返回自加后的变量值;
对于赋值运算,其优先级低于自加运算,所以
i = i++;
也就是:
i = (i++);
即右边表达式中,i自加了,值成了1,但整个表达式会返回0,0再赋值给i, 这样i的值 又成了0;
如此下面的都同理。
Top
10 楼rainly1985(不在彷徨)回复于 2005-08-05 11:39:11 得分 0
to interhanchi(路曼曼其修远兮,吾将上下而求索.)
你说的地球人都知道,不要自以为是Top




