给大家一个有趣的问题!
不知道大家认为
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的语法解释不清楚。