先给出一段简单的代码如下:
public class Test {
public static void main(String[] args) {
int j = 0;
for (int i = 0; i < 7 ; i ++) {
j = j++;
}
System.out.println(j);
}
}
程序输出为0,有点不解,Google后发现是“Java中间缓存变量机制”,还是不清不楚。所以使用javap对编译后的class文件进行分析。
指令为:
javac Test.java
javap -c Test
得到如下代码:
Compiled from "Test.java"
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
// 程序主入口
public static void main(java.lang.String[]);
Code:
0: iconst_0 //int型常量值0进栈
1: istore_1 //将栈顶int型数值存入第二个局部变量
2: iconst_0 //int型常量值0进栈
3: istore_2 //将栈顶int型数值存入第三个局部变量
4: iload_2 //将第三个int型局部变量进栈
5: bipush 7 //将一个byte型常量值推送至栈顶
7: if_icmpge 21 //栈顶两整数比较,若结果大于0就跳转到21
10: iload_1 //将第二个int型局部变量进栈
11: iinc 1, 1 //指定int型变量增加指定值
14: istore_1 //将栈顶int型数值存入第二个局部变量
15: iinc 2, 1 //指定int型变量增加指定值
18: goto 4 //跳转4
21: getstatic #2 //获取指定类的静态域,并将其值压入栈顶
24: iload_1 //将第三个int型局部变量进栈
25: invokevirtual #3 //调用实例方法
28: return
}