javap有以下命令:
可以使用其中的 javap -c 来对 .clss 文件进行反汇编,查看底层代码
例1:
使用javap -c 进行反汇编可以看到如下底层代码:
指令:
ldc:读/加载常量 a
astore_1:分配一块内存,将 a 存进去
例2:
例3:
例4:
指令:
new:JVM创建一个对象,并将其压入栈中
dup:对栈顶的内容做一个备份
invokespecial:调用实例初始化方法<init>:()V
,会弹出一个之前入栈的对象地址,会消耗操作数栈顶
由例3和例4可以看出来,虽然结果一样,但是底层并不相同,所以比较字符串时不能使用==,需要使用equals
例5:
例6:
由例5和例6可以看出来,x++ 和 ++x的底层代码也是不一样的