日期:2014-05-20  浏览次数:20808 次

i++
正值招工季,我来给大家出一道题,关于i++的问题

int x = 0;
for(int i=0; i<100; i++) {
x = x++;
}
System.out.println(x);
x = 0;
x = x++ + ++x;
System.out.println(x);

自己复制后运行吧,骚年,欢迎大家踊跃讨论。
java i++

------解决方案--------------------
还记得以前学C语言的时候为++问题和同学争论不休。。。
------解决方案--------------------
目测0,1.。
具体运行一下。。。
原来是0,2。

------解决方案--------------------
求讲解。。。

int x = 10;
int y = x++;
System.out.println(y); // 10;
System.out.println(x); // 11;

int a = 10;
int b = ++a;
System.out.println(a); // 11;
System.out.println(b); // 11;
/*
我搜了网上的讲解大多事理解为
x++; 先在x所在的表达式中使用x的当前值,后让x加1
++x; 先把x的值加1,然后在运算中使用x的新值
我也是这样理解的
*/
在看他的代码:
int x = 0;
for(int i=0; i<100; i++) {
// 这里x = x++;这句还没运行完,x的值为0;运行完了之后x的值不是应该加1的吗?
    x = x++; 
}
System.out.println(x);

x = 0;
// 这一句就完全不知道怎么拆开来解释了
x = x++ + ++x;
System.out.println(x);



------解决方案--------------------
引用:
第一个打印出来的为什么是0?
x=x++; x=0时  x++的值是0,即x=0,但是不是还要执行x的自增么?自增之后x应该是1了啊,为什么x还是0  求解释

循环里面等价于:

int tmp = x++;//此句结束后tmp=0,x=1;
x = tmp;//x重新复制为0

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

第一个打印出来的为什么是0?
x=x++; x=0时  x++的值是0,即x=0,但是不是还要执行x的自增么?自增之后x应该是1了啊,为什么x还是0  求解释

循环里面等价于:

int tmp = x++;//此句结束后tmp=0,x=1;
x = tmp;//x重新复制为0

x=0
x = x++ + ++x;
等价于
tmp =x++ + ++x;//2
x=tmp;

不过x++ + ++x我也不清楚为什么等于2,总感觉为1,这样的运算好像跟编译器有关,结果不一定


x=0
x = x++ + ++x;

运算总是从左往右一步一步:
上面等价于:

int x = 0;
int tmp1 = x++;//tmp1=0,x=1;
int tmp2 = ++x;//tmp2=2,x=2,++的优先级高
x = tmp1 + tmp2;//x=2