亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

IF_ICMPNE 是什么意思?

IF_ICMPNE 是什么意思?

瀟湘沐 2022-05-25 16:04:56
對于以下 Java 類:public class ArtClass {   public boolean foo(int x) {      if(x == 3956681)        return true;      else if(x == 9855021)        return true;      else if(x == 63085561)          return true;      else        return false;   }}它的JVM指令是:I4 Branch 1 IF_ICMPNE L3I13 Branch 2 IF_ICMPNE L5I22 Branch 3 IF_ICMPNE L7我知道第一個分支在第三行,第二個和第三個分支也一樣,但是是什么意思,還有IF_ICMPNE什么意思?I4I13I22
查看完整描述

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也指字節碼偏移量,但沒有進一步的上下文,例如查看該方法的其他指令,這是毫無意義的。


查看完整回答
反對 回復 2022-05-25
?
慕容森

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


查看完整回答
反對 回復 2022-05-25
  • 2 回答
  • 0 關注
  • 681 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號