0
点赞
收藏
分享

微信扫一扫

使用javap命令或者eclipse的Bytecode visualizer插件阅读java字节码文件

一葉_code 2023-02-07 阅读 55


阅读java的class文件,最常用的方法是jdk自带的javap命令,但是在eclipse有Bytecode visualizer插件,也可以很好地实现阅读;

直接阅读class文件,能够了解一下代码如何执行的内幕,以下面这个代码为例



一段用于阅读字节码的源码

 

Java

 

package test; import java.util.List; public class Test { public void test() { String a = "x" + "y" + 1; String b = "xy1"; System.out.println(a == b); } public static void main(String[] args) { Test t = new Test(); t.test(); } }


package test ;

import java . util . List ;

public class Test {
public void test ( ) {
String a = "x" + "y" + 1 ;
String b = "xy1" ;
System . out . println ( a == b ) ;
}

public static void main ( String [ ] args ) {
Test t = new Test ( ) ;

t . test ( ) ;
}
}



test()方法很多人都知道返回true,但是为什么会这样呢?很多人可能说不清楚。我们分别用两种方法阅读一下它们的字节码;

该文件首先需要被编译,得到了Test.class文件

1、使用javap命令阅读

进入Test.class目录,然后使用javap -v Test.class > out将字节码文件读取后存入out文件,然后用notepad++打开out文件:

test()函数的样子:

​​

使用javap命令或者eclipse的Bytecode visualizer插件阅读java字节码文件_Test

​​

从字节码可以看到,编译器已经自动的将变量a的值合并在一起,成为了xy1,因此相当于xy1两个字符串的比较,两者都处于常量区,因此相等;

2、使用eclipse的Bytecode visualizer插件阅读

安装好插件之后,首先将其配置一下,以显示最大化的字节码信息

​​

使用javap命令或者eclipse的Bytecode visualizer插件阅读java字节码文件_java_02

​​

然后打开eclipse的Navigator窗口,找到编译好的Test.class,右键,用字节码方式打开,就会看到更易读的字节码

​​

使用javap命令或者eclipse的Bytecode visualizer插件阅读java字节码文件_字节码_03

​​

同时在编辑器的右侧,能够自动查看该段代码的流程图,非常方便;

 

使用这两种方式,就能够查看代码编译后的内幕,对一些奇怪的语法现象,就能够自己找出为什么了

但是在测试的过程中,自己写了个print(List<String> strs)的方法,使用Javap命令和Byte visualizer两者,输出的字节码中,前者带着泛型信息,后者进行了泛型擦除,两者不同,很是奇怪;

举报

相关推荐

0 条评论