因为这是Java SE 7的一个新特性,所以它不能在Java SE 6或者更低版本的编译器上来编译。用Java SE 7的javac来编译。下面是通过javap -c来反编译后的结果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
C:Test>javap -c SwitchTest.classCompiled from "SwitchTest.java" public class SwitchTest { public SwitchTest(); Code: 0 : aload_0 1 : invokespecial # 1 // Method java/lang/Object."<init>":()V 4 : return public int doSwitch(java.lang.String); Code: 0 : aload_1 1 : astore_2 2 : iconst_m1 3 : istore_3 4 : aload_2 5 : invokevirtual # 2 // Method java/lang/String.hashCode:()I 8 : lookupswitch { // 2 48690 : 50 96354 : 36 default : 61 } 36 : aload_2 37 : ldc # 3 // String abc 39 : invokevirtual # 4 // Method java/lang/String.equals:(Ljava/lang/Object;)Z 42 : ifeq 61 45 : iconst_0 46 : istore_3 47 : goto 61 50 : aload_2 51 : ldc # 5 // String 123 53 : invokevirtual # 4 // Method java/lang/String.equals:(Ljava/lang/Object;)Z 56 : ifeq 61 59 : iconst_1 60 : istore_3 61 : iload_3 62 : lookupswitch { // 2 0 : 88 1 : 90 default : 92 } 88 : iconst_1 89 : ireturn 90 : iconst_2 91 : ireturn 92 : iconst_0 93 : ireturn |