Yeni Java 7 Dize Anahtarı özelliğini kullanan çok basit bir sınıfı decompiled ettik. Bu sınıfa karşı Java 7 "javap" RunningJava 7 Dize anahtarı decompiled: beklenmedik yönerge
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;
}
}
}
, talimatların ilginç seti (tam demonte kod here mevcuttur) üretir:
sınıf
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 ", anahtar kutusu seyrek olduğunda ve TABLESWITCH'in yerini alabilen," anahtar "ifadeleri için varsayılan komut olan bir talimattır.
Yani, soru şu, neden bir "LOOKUPSWITCH" ve ardından "TABLESWITCH" izliyoruz?
Teşekkür Luciano
doğru case ifadesi bulmakta anahtarı dizeleri ile
Cevabınız için teşekkür ederiz. Bu mantıklı. –