为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 641 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信