作为程序员,其实平时写的代码的基本语法无非就是循环,选择,抛出异常,下面我们就对这些代码对应的字节码进行解析
首先是循环
public int inc () {
int a=0;
for(int i=0;i<10;i++){
a++;
}
return a;
}
对应的字节码
0: iconst_0//将0置入栈顶
1: istore_1//将栈顶为int元素赋值给第二个本地变量,即,a=0;
2: iconst_0//将0置入栈顶
3: istore_2/将栈顶为int元素赋值给第三个本地变量,即,i=0;
4: iload_2//将第三个本地变量放入栈顶,即,i,置于栈顶
5: bipush 10//将值为10的1byte的数据置入栈顶(可以理解为int 10)
7: if_icmpge 19//将栈顶两个int类型的元素进行比较当结果大于等于0时跳转至第19条指令
//注意,此处与Java中的代码是相反的,可以理解为若i>=10结束循环
10: iinc 1, 1//让第二个本地变量自增1,即,a++;
13: iinc 2, 1//让第三个本地变量自增1,即,i++;
16: goto 4//跳转至第4条指令
19: iload_1/