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 楼答案
if_icmpne 20
意思是:比较操作数堆栈上的2int
值(i
,如果(if
),则它们不相等(ne
转到偏移量20处的字节码(^{goto 28
意思是:转到偏移量28(goto
)处的字节码(28
)。见goto要查看所有字节码指令的描述,请参阅The Java® Virtual Machine Specification的第6章