java ++的问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 22:06:49
....
int i = 0;
i = i++;
System.out.println(i);
为什么输出的是零,希望有高人指点

不明白就不要乱说,误人子弟。
i++是一个算法表达式。对于后缀的表达式。原则是这样的,变量i本身自加1,而表达式保持原来的值不变。
对于你的程序解释如下,i++后,i的值为1,而i++的值为i原来的值就是0.
但是你接着把这个表达式的值又赋给了i,所以i又从1变成了0。

对于二楼的,如果i = (i++);后,结果还是0,就是说不是二楼所说的那个顺序问题。测试下这个就明白了:

int i=0;
int y;
y=(i++);

System.out.println("i= " + i);
System.out.println("y= " + y);

其实你的问题问的好.(因为你不是问i++ 和 ++i的区别)
i=i++最终是想获取i++表达式的值,它的执行过程是这样的:
(1)首先是i++表达式的值为0(这点想你不难明白吧)
(2)随后看似i要再进行一次自加运算变成1,但是请不要忘了i=i++是想获取表达式的值。
(3)你i进行自加运算了,但是最后我还是要得到表达式的值,所以最终i=0.
(4)验证:这样写可能好理解些
int i=0;
int temp=i++;
i=temp;
System.out.println(i);

i=i++;
这句分成三句;
int tmp=i;
i++;
i=tmp;

也就是说,首先有一个中间值,存储着i的初始值为0,
然后i++,这时i变为1;
最后i=tmp,i又变回了0.

看得明白吗?

这是自加运算的法则

i = i++; 是先把 i的值赋给左边的 i, 因此打印为0.然后右边i的值再加1

而i = ++i ; 是先把 i的值加1,再赋给左边的 i,因此打印为1

i