有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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) 个答案

  1. # 1 楼答案

    if_icmpne 20意思是:比较操作数堆栈上的2inti,如果if),则它们不相等ne转到偏移量20处的字节码(^{)。见if_icmp

    goto 28意思是:转到偏移量28goto)处的字节码(28)。见goto

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