1:字节码
与机器无关的代码,由Java编译器生成,Java解释器来执行
int i=0;
i=i++;
这个时候的字节码是
0: iconst_0//常数0入栈
1: istore_1//i赋值,常数值出栈 //至此完成i=0;
2: iload_1 //第二步是特殊的一步,这步将i值先行保存,以备赋值使用
3: iinc 1, 1//变量值增加,栈内值不变
//至此完成i++
6: istore_1//i赋值,0出栈。
//至此完成i=i++
如果是
int i=0;
i=++i;
0: iconst_0//常数0入栈
1: istore_1//i赋值,常数值出栈 //至此完成i=0;
2: iinc 1, 1 //变量值增加
5: iload_1//第五步是特殊的一步,这步将i值先行保存,以备赋值使用
6: istore_1
2:二进制文件
与机器无关的代码,由Java编译器生成,Java解释器来执行
int i=0;
i=i++;
这个时候的字节码是
0: iconst_0//常数0入栈
1: istore_1//i赋值,常数值出栈 //至此完成i=0;
2: iload_1 //第二步是特殊的一步,这步将i值先行保存,以备赋值使用
3: iinc 1, 1//变量值增加,栈内值不变
//至此完成i++
6: istore_1//i赋值,0出栈。
//至此完成i=i++
如果是
int i=0;
i=++i;
0: iconst_0//常数0入栈
1: istore_1//i赋值,常数值出栈 //至此完成i=0;
2: iinc 1, 1 //变量值增加
5: iload_1//第五步是特殊的一步,这步将i值先行保存,以备赋值使用
6: istore_1
2:二进制文件