给大家一个有趣的问题!

TangJianQiang 2005-03-28 06:48:54
不知道大家认为
int j=1;
j=j++;
对于C++和JAVA来说,执行j=j++;以后觉得j的值是多少呢?为什么?
我分别用VC++.net和JAVA试过,VC++.net的结果是2,而JAVA是1

在VC.net里面j=j++;的执行过程是这样
int j=1;
0041B22E mov dword ptr [j],1
j=j++;
0041B235 mov eax,dword ptr [j]
0041B238 mov dword ptr [j],eax
0041B23B mov ecx,dword ptr [j]
0041B23E add ecx,1
0041B241 mov dword ptr [j],ecx

而j++;在VC.net里面的执行过程是
0041B23B mov ecx,dword ptr [j]
0041B23E add ecx,1
0041B241 mov dword ptr [j],ecx
这说明了在VC++.net里面执行j=j++;是解释成j=j;j++;

而n=(j++)+(n+j);在VC++.net里面是这样执行的
0041B23C mov eax,dword ptr [n]
0041B23F add eax,dword ptr [j]
0041B242 add eax,dword ptr [j]
0041B245 mov dword ptr [n],eax
0041B248 mov ecx,dword ptr [j]
0041B24B add ecx,1
0041B24E mov dword ptr [j],ecx
这里编译器解释成n=j+n+j;j++;

所以在任何语句里面出现的自增或自减操作都是紧跟在这
条语句之后的由于本人不知道怎么看JAVA的汇编指令,所以对
于JAVA的语法解释不清楚。
...全文
77 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hodex 2005-03-28
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topicview.asp?id=3885309
zcjl 2005-03-28
  • 打赏
  • 举报
回复
javap -c YourClass
可以看到bytecode指令

23,407

社区成员

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

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