2021-12-11 22:57

利用反编译字节码,分析变量++和++变量的区别

码自答

JavaEE

(1276)

(0)

收藏

1 通过命令编译程序

javac *.java

image.png

打开命令提示符

image.png

编译Test.java文件,生成字节码文件,如果提示不是内部或者外部命令,就需要设置环境变量。


2 反编译字节码文件

javap -c *.class

image.png

程序运行结果,变量a的值是1。


3 对比a++和++b

image.png

程序运行结果,变量a的值是1,变量b的值也是1

从字节码反编译的结果看,a++和++b没有区别。


4 对比x = a++和y=++b

image.png

从字节码反编译的结果看

变量a的值会变成1 变量b的值也会变成1

对于x=a++而言,会先将a的值保存到栈,再执行+1,变量a的值变成1,再将栈的值给x,所以x的值是0

对于y=++b而言,会先将b的值+1,变成1,再将b的值保存到栈,栈的值会是1,再将栈的值给y,所以y的值是1


5 对比a=a++和b=++b

image.png

a=a++,先将a的值保存到栈,栈的值是0,再a的值+1,a变成1,再将栈的值给a,a的值重新回到0

b=++b,先将b的值+1,b的值变成1,再将b的值保存到栈,栈的值是1,再将栈的值给b,所以变量b的值是1

0条评论

点击登录参与评论