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

我已经反编译了一个使用新的

Java 7字符串切换功能的非常简单的类.

班上:

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”,生成一组有趣的指令(完整的反汇编代码可用here):

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”?

谢谢

卢西亚诺

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值