Jad反编译深度理解Java语法糖

有没有什么工具能够比较直观的协助我们理解Java语法糖,列如Integer和int拆箱装箱、字符串拼接、泛型类型擦除、不定长参数呢

Jad下载安装配置

参考:Jad安装下载配置

前置准备

编译java文件(javac xxx.java)->反编译class文件(jad -o xxx.class)

Jad反编译深度理解Java语法糖

装箱和拆箱

Integer it = 127;
int i = it;

使用jad反编译如下:

Jad反编译深度理解Java语法糖

可以看到装箱时实则调用的是Integer.valueOf()方法,拆箱调用的是Integer.intValue()方法

字符串拼接

String str = "a" + "b";
String str1 = str + "cd";

使用jad反编译如下:

Jad反编译深度理解Java语法糖

可以看到如果是常量字符串拼接编译时是直接拼接成字符串常量,如果是拼接的变量编译时会创建StringBuilder对象调用append方法进行拼接

泛型类型擦除

List<Integer> list1 = new ArrayList<Integer>();
List<String> list2 = new ArrayList<String>();

使用jad反编译如下:

Jad反编译深度理解Java语法糖

可以看到泛型类型编译时被擦除掉了

不定长参数

public static void main(String[] args) {
   print(1,2,3);
}

private static void print(int ...args) {
   for (int i = 0; i < args.length; i++) {
      System.out.println(args[i]);
   }
}

使用jad反编译如下:

Jad反编译深度理解Java语法糖

可以看到不定长参数编译时被转化为了数组

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
酸菜饺子加醋精的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容