再论i++.
public class Test {
public static void main(String[] args)
{
int i = 0;
i =i++;
System.out.println(i);
int a=i++;
System.out.println(a);
}
}
此时i,a为多少?好象i++是有点问题
问题点数:20、回复次数:18Top
1 楼ender(ender)回复于 2001-07-05 09:13:36 得分 0
i = 0;
a = 0;Top
2 楼karma(无为MS MVP)回复于 2001-07-05 09:13:38 得分 0
x=i++相当于:
int temp;
temp = i;
i=i+1;
x=temp;
所以,
i=0;
i=i++;==>
temp=0;
i=1;
i=temp; ==> i=0;
and
a=i++; ==>
temp = 0;
i=1;
a=temp; ==> a = 0;
Top
3 楼kuqi(苦青)回复于 2001-07-05 09:17:21 得分 0
没什么错的了,++ 的优先级比=高,所以先运行i++,但是i=i++;执行的操作是把运行以前的值赋给i,所以应该是0,而 a当然肯定是0了Top
4 楼ender(ender)回复于 2001-07-05 09:19:39 得分 0
:)
其实关于i++,所有的书都说得很清楚啊……
i++以后,i=1,但i++这个表达式的值仍然是0啊……
所以i=i++,i仍然是0……Top
5 楼luodi(无知者无畏)回复于 2001-07-05 09:29:54 得分 0
其实理解这个问题的核心就在于:表达式也有值, i++ 是一个表达式,它的值与表达式计算完后i 的值是两回事。Top
6 楼I_am_me(你好)回复于 2001-07-05 10:27:01 得分 10
这个问题我在181782.shtml中有叙述,请看Top
7 楼zhanghw(zhanghw)回复于 2001-07-05 10:35:42 得分 0
完全同意 无知者无畏 的意见 清楚的不能再清楚了Top
8 楼gdsean(摇滚java)回复于 2001-07-05 10:47:55 得分 0
i =i++;是先运算再自加一
如果i=0,i++加一的效果哪里去了
i++在=运算时先把i=0;然后加一,
那么i好象该是1了,i只有一个地址
temp=i++就不同了,这里temp就是0
Top
9 楼luodi(无知者无畏)回复于 2001-07-05 11:16:58 得分 0
i = i++; 这个语句就是:
temp = i++;
i = temp;
这两个语句同样效果的简写, i++ 的效果为什么一定要存在呢?
Top
10 楼gdsean(摇滚java)回复于 2001-07-05 11:26:47 得分 0
i++等于i=i+1
i=i++这句先执行=
所以i=0;
然后执行i++
所以i=1
luodi请指点
Top
11 楼wweigh(先倒)回复于 2001-07-05 11:30:27 得分 0
c 中好象应该是1Top
12 楼wweigh(先倒)回复于 2001-07-05 11:35:33 得分 0
i=i++时i的确为0,但在println输出时,i的值已经变了才对呀?起码C中是这样。
Top
13 楼luodi(无知者无畏)回复于 2001-07-05 11:38:58 得分 0
为什么你认为会先执行 = ?
在Java/C/C++ 以及任何一种有 ++ 这个运算符的语言中, ++ 这个运算符都比 = 这个运算符优先级高,所以一定会先执行 ++, 记住, = 没什么特别之处,只是一个运算符!Top
14 楼stellaxyq(汐)回复于 2001-07-05 11:45:14 得分 10
对楼上的
i++,和++i的区别在于,前者是先取i值,在进行++,后者是先++在取i值,=是没什么特别的
但++是特别的
单独用的话i++,和++i没区别
但在表达式里面的话就要小心了Top
15 楼bobosji(波波司机)回复于 2001-07-05 12:12:09 得分 0
我最看重的结果,刚才实验了,结果:
0
0
Top
16 楼I_am_me(你好)回复于 2001-07-05 12:27:59 得分 0
c/C++中
int i=0;
int man[2];
man[printf("%d\n",i)]=(i++)+(i++)+(i++)+(i++)+(i++);
得到0
说明i++在赋值语句后计算,而不是表达式后计算
Top
17 楼luodi(无知者无畏)回复于 2001-07-05 12:29:59 得分 0
你说的情况可能是C/C++编译器表达式优化的结果。
Top
18 楼MicroDirt(微尘)回复于 2001-07-05 12:45:58 得分 0
0+0+0+0+0=0Top




