环境:jdk1.8
工具:javap
javap操作命令:
javap -v xxx.class
0x001 类型一
代码如下:
public void difference() {
int i = 10;
i++;
int b = 10;
++b;
}
使用javap反编译一下得到如下信息:
操作流程:
return
表示 return void
,代表方法此方法结束。
区别:
通过上图可以看出,单纯的i++
与++i
的操作,他们的字节码指令流程是相同的,都是先入栈值,弹栈并存局部变量表,在将表中的值增加1.
0x002 类型二
代码如下:
public void difference() {
int a = 20;
int b = a++;
int c = 20;
int d = ++c;
}
使用javap反编译一下得到如下信息:
操作流程:
区别
通过上图可以看出,int b = a++
与int d = ++c
的区别,如红框圈出的地方所示。前者是先将局部变量
表中的数据入栈
,在将局部变量表
中数据增加1,也就是先使用后自增
;后者是先将局部变量表
中数据增加1,在取出局部变量
中数据入栈
,也就是先自增后使用
。