Java中碰到的有趣问题

feimor 2007-12-24 07:44:11
int i=0;
i=i++;
i=i++;
i=i++;
System.out.println(i);

为什么输出结果为0?
...全文
111 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenny_chen 2007-12-24
  • 打赏
  • 举报
回复
这个问题的关键在于Java字节码的优化使得i++没有回写。也就是将右操作数i作为一个与左操作数i不同的临时变量。
zenny_chen 2007-12-24
  • 打赏
  • 举报
回复

int i=0;
i=(i++);
i=(i++);
i=(i++);
System.out.println(i);


结果仍然为0。

fengfeng925 2007-12-24
  • 打赏
  • 举报
回复
1楼解释的很好,正解.
老紫竹 2007-12-24
  • 打赏
  • 举报
回复
    int   i=0; 
i=(i++);
i=(i++);
i=(i++);
System.out.println(i);


猜一下,这个运行结果如何?
zenny_chen 2007-12-24
  • 打赏
  • 举报
回复
在C++中结果是3。

因为在Java中i = i++,这个是对变量i进行了一些优化。由于变量被放到了某个暂存器(硬件上称为寄存器)中,因此,上面的语句可以分解为:

int i = 0; ==> tmp = 0, [i] = tmp;

i = i++; ==> tmp = [i]; [i] = tmp; tmp++;

这里,由于暂存器执行自增操作但没有写回,因此变量i的值仍然为0,没有变化。
ziseyezi 2007-12-24
  • 打赏
  • 举报
回复
同意一楼的,自减符号放在后面,先赋值,后自增一。
cgk1000 2007-12-24
  • 打赏
  • 举报
回复
那你认为应该是多少呢?
liangCK 2007-12-24
  • 打赏
  • 举报
回复
初始化为0.打错了.
liangCK 2007-12-24
  • 打赏
  • 举报
回复
初始化为1
i=i++ //i赋值后自增1,但是先赋值,所以i还是0
后面两个同理.
所以最后System.out.println(i); //输出为0

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧