热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

IF_ICMPNE是什么意思?

如何解决《IF_ICMPNE是什么意思?》经验,为你挑选了1个好方法。

对于以下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 L3
I13 Branch 2 IF_ICMPNE L5
I22 Branch 3 IF_ICMPNE L7

据我所知,第一个分支是在第三行与同为第二和第三分支但到底是什么IF_ICMPNE意思,也做什么I4,I13以及I22是什么意思?



1> Holger..:

这是javap -c为您的类生成的输出(javap是每个标准JDK附带的工具):

Compiled from "ArtClass.java"
public class ArtClass {
  public ArtClass();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."":()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
}

所有指令的含义已在TheJava®虚拟机规范的"指令集"一章中指定.指令if_icmpne将弹出2 nt的值,Ç ö 熔点是它们,并分支到指定的目标,如果 Ñ OT Ë QUAL.

输出javap非常清楚,分支指令指定了哪些目标,因为它们与每条指令之前打印的数字相匹配.

如果使用生成不同输出的其他工具,则必须参考该工具的文档,如何解密输出.与javap输出的比较表明,这些前缀I4也类似于字节码偏移,但没有进一步的上下文,例如看到方法的其他指令,这是安静无意义的.


推荐阅读
author-avatar
落幕YL他
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有