使用javap -c classname
您可以檢查自己的字節碼,
這裏的選項1:
(注意,我不得不初始化a = null
否則它不會編譯)
7: aconst_null
8: astore_2
9: iload_1
10: tableswitch{ //1 to 3
1: 36;
2: 42;
3: 48;
default: 51 }
36: ldc #3; //String Cueck
38: astore_2
39: goto 51
42: ldc #4; //String Blub
44: astore_2
45: goto 51
48: ldc #5; //String Writing cases is BORING!
50: astore_2
51: getstatic #6; //Field java/lang/System.out:Ljava/io/PrintStream;
54: aload_2
55: invokevirtual #7; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
58: return
這裏的選項2 :
7: iload_1
8: tableswitch{ //1 to 3
1: 36;
2: 47;
3: 58;
default: 66 }
36: getstatic #3; //Field java/lang/System.out:Ljava/io/PrintStream;
39: ldc #4; //String Cueck
41: invokevirtual #5; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
44: goto 66
47: getstatic #3; //Field java/lang/System.out:Ljava/io/PrintStream;
50: ldc #6; //String Blub
52: invokevirtual #5; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
55: goto 66
58: getstatic #3; //Field java/lang/System.out:Ljava/io/PrintStream;
61: ldc #7; //String Writing cases is BORING!
63: invokevirtual #5; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
66: return
就我個人而言,我認爲在這個例子中有更好的字節碼,我發現選項1更具可讀性。
我建議你獲取ASM字節碼大綱並自己測試一下。 :) – PermGenError 2013-03-08 09:50:56
第一個將結果存儲在變量中。 – nullpotent 2013-03-08 09:51:17
我不會擔心它,除非它被執行了420億次......這個問題僅僅是爲了理論,還是爲了一個真正的問題? – vikingsteve 2013-03-08 09:51:37