Topic: 运算符的问题,求助!!!! (i=i++;)

  Print this page

1.运算符的问题,求助!!!! (i=i++;) Copy to clipboard
Posted by: sunyboy001
Posted on: 2006-02-20 13:09

public class Inc
{
public static void main(String argv[])
{
Inc inc = new Inc();

int i = 0;

inc.fermin(i);

i = i++; //请教i = i++ 和 i++间的区别

System.out.println(i);
}
void fermin(int i)
{
i++;
}
}

这是Amay的SCJP1.4笔记的一个例题,输出结果是0;
如果将 i = i++ 改为 i++,输出结果就会变成1,
所以请教各位大虾解释解释 i = i++与 i++间的区别,不盛感谢!!!

2.Re:运算符的问题,求助!!!! [Re: sunyboy001] Copy to clipboard
Posted by: sunyboy001
Posted on: 2006-02-20 13:11

怎么变灯泡了呢?
那些灯泡都是 ( i )

3.Re:运算符的问题,求助!!!! [Re: sunyboy001] Copy to clipboard
Posted by: ranchgirl
Posted on: 2006-02-20 15:08

Edit your post, uncheck 禁止在这个帖子中使用笑脸标记

4.Re:运算符的问题,求助!!!! [Re: sunyboy001] Copy to clipboard
Posted by: xiaoqiang
Posted on: 2006-02-20 15:42

i=i++;可以分解为:

int t =1, i=0;
t=i++;
这时先将 i 的值赋给 t, t=0;
然后 i 再自加,变为1;

5.Re:运算符的问题,求助!!!! [Re: sunyboy001] Copy to clipboard
Posted by: sunyboy001
Posted on: 2006-02-20 16:06

谢谢,我想我明白了

6.Re:运算符的问题,求助!!!! [Re: sunyboy001] Copy to clipboard
Posted by: xiaoqiang
Posted on: 2006-02-20 16:21

在编译器上出了问题,java的编译器在遇到i++和i- -的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉。

i的原始值存放在后开辟的内存中,最后这个值将赋值给j,这样j=i++后,j就会得到i的值,而i又将自加,所以,在释放内存之后,原来存放j和i的地方将得到值将是:j(此时的值等于初始i值)和i(i自加后的值)。

所以i=i++的时将新开辟空间的 i 的原值最后重新给 进行过自加运算的 i 。所以 i 为0。

7.Re:运算符的问题,求助!!!! [Re: sunyboy001] Copy to clipboard
Posted by: xiaoqiang
Posted on: 2006-02-20 16:25

不好意思,开始我也没注意 i = i++;后 i 仍为0后来查了才知道是编译器的问题和c++有很大的不同。

8.Re:运算符的问题,求助!!!! (i=i++;) [Re: sunyboy001] Copy to clipboard
Posted by: sunyboy001
Posted on: 2006-02-20 23:36

呵呵--- 不大好懂,不过我想我还是明白了,多谢指点,谢谢!!!!!!

9.Re:运算符的问题,求助!!!! (i=i++;) [Re: sunyboy001] Copy to clipboard
Posted by: whiye
Posted on: 2006-02-22 14:03

呵呵又学到了新的知识.

10.Re:运算符的问题,求助!!!! (i=i++;) [Re: sunyboy001] Copy to clipboard
Posted by: 佐罗
Posted on: 2006-02-23 11:20

仿佛有点懂了 呵呵

11.Re:运算符的问题,求助!!!! (i=i++;) [Re: sunyboy001] Copy to clipboard
Posted by: suntao19830709
Posted on: 2006-03-24 16:36

其实我个人觉得,讨论这个太无聊了,看到过人写i++,也看到过人写a=i++,但是谁写代码会写i=i++呢??i=i++就和 i = i 一样是实足的垃圾代码!!!不过话说回来,i=++i却不是废代码。i的值会在原来基础上加1,但这仍然是画蛇添足。


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923