2 回答

TA貢獻1846條經驗 獲得超7個贊
這是javap -c為您的類生成的輸出(javap是每個標準 JDK 附帶的工具):
Compiled from "ArtClass.java"
public class ArtClass {
public ArtClass();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public boolean foo(int);
Code:
0: iload_1
1: ldc #2 // int 3956681
3: if_icmpne 8
6: iconst_1
7: ireturn
8: iload_1
9: ldc #3 // int 9855021
11: if_icmpne 16
14: iconst_1
15: ireturn
16: iload_1
17: ldc #4 // int 63085561
19: if_icmpne 24
22: iconst_1
23: ireturn
24: iconst_0
25: ireturn
}
所有指令的含義已在Java? 虛擬機規范的“指令集”一章中指定。if_icmpne指令會彈出兩個int值,c o mp是它們,如果 不相等則跳轉到指定的目標。
的輸出javap非常清楚,分支指令指定了哪些目標,因為它們與每條指令之前打印的數字相匹配。
如果您使用不同的工具產生不同的輸出,您必須參考該工具的文檔,了解如何破譯輸出。與javap' 的輸出進行比較表明,這些前綴 likeI4也指字節碼偏移量,但沒有進一步的上下文,例如查看該方法的其他指令,這是毫無意義的。

TA貢獻1853條經驗 獲得超18個贊
這里有一個文檔:http ://homepages.inf.ed.ac.uk/kwxm/JVM/if_icmpne.html
if_icmpne:
Description: jump to label if the two integer refs are not equal
添加回答
舉報