Java字节码执行不了解go语句在字节码中的工作方式

时间:2019-07-16 18:00:22

标签: java bytecode

class Condition{

     public static void main(String[] args) {

        int i =10;

        if(i==10){

            System.out.println("low");
        }
        else{
            System.out.println("high");
        }

    }
}

上面给出了示例程序:

下面的字节码:

0: bipush        10
2: istore_1
3: iload_1
4: bipush        10
6: if_icmpne     20
9: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
12: ldc           #3                  // String low
14: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
17: goto          28
20: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
23: ldc           #5                  // String high
25: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
28: return

我不了解字节码的整体工作原理 指示如何工作

1 个答案:

答案 0 :(得分:1)

if_icmpne 20的意思是:比较cmp操作数上的两个inti堆栈,如果if 不相等ne转到偏移量20 ({{1 }})。参见if_icmp

20的意思是:转到goto 28字节码,偏移量为28 goto。参见goto

要查看所有字节码指令的描述,请参见The Java® Virtual Machine Specification的第6章。

相关问题