java反编译字符串_Java 7字符串开关反编译:意外指令

我已经反编译了一个使用新的Java 7 String Switch功能的非常简单的类。

班上:

public class StringSwitch {

public static void main(String[] args) {

final String color = "red";

switch (color) {

case "red":

System.out.println("IS RED!");

break;

case "black":

System.out.println("IS BLACK");

break;

case "blue":

System.out.println("IS BLUE");

break;

case "green":

System.out.println("IS GREEN");

break;

}

}

}

针对此类运行Java 7“

javap”,会生成一组有趣的指令(完整的反汇编代码可在此处获得):

public static void main(java.lang.String[]);

flags: ACC_PUBLIC, ACC_STATIC

Code:

stack=2, locals=4, args_size=1

...

12: lookupswitch { // 4

112785: 56

3027034: 84

93818879: 70

98619139: 98

default: 109

}

56: aload_2

57: ldc #2 // String red

...

110: tableswitch { // 0 to 3

0: 140

1: 151

2: 162

3: 173

default: 181

}

140: getstatic #8 // Field java/lang/System.out:Ljava/io/PrintStream;

143: ldc #9 // String IS RED!

...

181: return

“ LOOKUPSWITCH”是在切换大小写稀疏时可以使用的指令,可以替换TABLESWITCH,这是“ switch”语句的默认指令。

因此,问题是,为什么我们会看到“ LOOKUPSWITCH”和“ TABLESWITCH”?

谢谢卢西亚诺

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值