请教,int i=0;i=i++;在c++中输出i=1而在java中输出i=0???

sameboat 2003-10-18 03:42:18
在C++中,
int i=0;
i=i++;
等价于
int i=0;
i=i;
i++;
故输出i=1

====================================================
而在java中输出i=0;这是怎么回事呢???
...全文
107 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cbhyk 2003-10-18
  • 打赏
  • 举报
回复
请看
public class Temp
{
public static void main(String[] args)
{
int i=0;
i=i++;
}
}
的字节码(JDK 1.3.1_01),由javap -c -verbose Temp生成:
Compiled from Temp.java
public class test.Temp extends java.lang.Object {
public test.Temp();
/* Stack=1, Locals=1, Args_size=1 */
public static void main(java.lang.String[]);
/* Stack=1, Locals=2, Args_size=1 */
}

Method test.Temp()
0 aload_0
1 invokespecial #9 <Method java.lang.Object()>
4 return

Method void main(java.lang.String[])
0 iconst_0 //将 0 压入堆栈。
1 istore_1 //弹出 0 并将它存储在局部分变量表中索引为 1 的位置 (i)。
2 iload_1 //压入索引 1 处的值 (i)。
3 iinc 1 1 //将存储在索引 1 处的 i 加 1。
6 istore_1 //弹出 0 并将它存储在局部变量表中索引为 1 的位置 (i)。
7 return

可以看出:“iinc 1 1”把i加1后,“istore_1”又把栈顶的0存入i,所以i的最后结果是0。

不知其它的编译器编译出来的字节码是不是和上面的(JDk 1.3.1_01)一样。
jackensun 2003-10-18
  • 打赏
  • 举报
回复
同意楼上的意见
sameboat 2003-10-18
  • 打赏
  • 举报
回复
我觉得可能涉及到内部编译机制。
littlecpu 2003-10-18
  • 打赏
  • 举报
回复
高手都不懂这样用++,都死光了
sameboat 2003-10-18
  • 打赏
  • 举报
回复
高手呢???
sameboat 2003-10-18
  • 打赏
  • 举报
回复
高手呢???
zhanghuazhanghome 2003-10-18
  • 打赏
  • 举报
回复
关注
sameboat 2003-10-18
  • 打赏
  • 举报
回复
up
sameboat 2003-10-18
  • 打赏
  • 举报
回复
up

62,614

社区成员

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

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