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

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

if 語句的 Java 字節碼指令

if 語句的 Java 字節碼指令

互換的青春 2022-06-30 10:36:22
我有以下Java類:public class ArtClassInt {   public boolean foo(int x) {      if(x == 3956681)        return true;      else        return false;   }   public boolean boo(int x) {      if(x <= 952140568)        return true;      else        return false;   }   public boolean boo1(int x, int y) {      if(x <= y)        return true;      else        return false;   }   public boolean zoo(int x) {      if(x+1 < 1267)        return true;      else        return false;   }}當我編譯它并得到它的字節碼時,我得到了以下與源代碼中的 if 語句相對應的語句:ArtClassInt.boo1(II)Z: I4 Branch 3 IF_ICMPGT L17 - trueArtClassInt.boo1(II)Z: I4 Branch 3 IF_ICMPGT L17 - falseArtClassInt.boo(I)Z: I4 Branch 2 IF_ICMPGT L10 - trueArtClassInt.boo(I)Z: I4 Branch 2 IF_ICMPGT L10 - falseArtClassInt.foo(I)Z: I4 Branch 1 IF_ICMPNE L3 - trueArtClassInt.foo(I)Z: I4 Branch 1 IF_ICMPNE L3 - falseArtClassInt.zoo(I)Z: I6 Branch 4 IF_ICMPGE L24 - trueArtClassInt.zoo(I)Z: I6 Branch 4 IF_ICMPGE L24 - false我對助記符(即,,等)完全感到IF_ICMPGE困惑IF_ICMPNE。通過查看源代碼,我希望:方法中的 if 語句不 foo應該是if_icmpeqIF_ICMPNEboo和方法中的 if 語句不boo1應該是。 if_icmpleIF_ICMPGT方法中的一個zoo應該 if_icmplt不是IF_ICMPGE。有人可以解釋這背后的原因嗎?
查看完整描述

2 回答

?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

我猜你不應該假設你的陳述應該逐字轉換為字節碼。


唯一相關的是語義應該相同。在中間代碼中將條件反轉為對應項是很常見的,請考慮一個 while 循環:


while (x < y) {

  code;

}

可以編譯為


START:

  CMP x y

  JMPGE END

  CODE

  JMP START

END:

  ...

您看到的是反轉條件,這是一個常見的成語。這是因為反轉條件允許您跳出塊,因此只有在相反的情況下才執行它。


查看完整回答
反對 回復 2022-06-30
?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

測試的條件被反轉,因為如果條件為真,它會跳轉(到else塊),否則它會繼續下一條指令。



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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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