JAVA中i++问题?

来源:百度知道 编辑:UC知道 时间:2024/07/04 11:16:46
int i=0;
i=i++;
System.out.println(i);
以上代码i的结果是:0.
但C++中确实1,为什么?

JAVA和C++对++操作符的处理是不同的 JAVA是在内存中复制一份i值的拷贝再运算 而C++中是直接在原值上运算
在java中i=i++的运算实质是 先执行i=i 再在内存中复制一份i的拷贝 对其++所以i为0
在C++中 则是先执行i=i 此时i为0 再执行i++ 此时i为1 故输出1

这么来给你解释吧,假设有两个内存块,part1和part2,i开始存在part1内
int i = 0;
int j = i++;
首先系统会把原来i的值拷贝一份到part2,这时候part1和part2都0,然后把part1的值赋给j,i指向了part2,同时part2的值加1,所以最后是j=0,i=1;
你如果写i=i++那么会有一个等于1的值丢失。
C语言中是:如果把i的值赋给j那么最后i和j都指向同一块内存,所以结果都为1

这确实和java语言的特性有关,由于java不依赖于硬件平台,而c/c++依赖于你用什么样的cpu进行计算,所以结果可能不同。
你会发现,用c/c++在不同平台上运行同一程序,可能会有不同结果,这也正是它的缺陷

这个跟语言的具体的实现有关系,如果出于编程考虑,你换一种实现就好了。这种有含混倾向的语句还是少用的好。

我试了也是0;
c++还有C语言的都是1;
可能是sun公司软件设计的吧;
java使用的是无指针设计,可能就是这题的答案吧!