今天写一个我们非常熟悉i++
public class Inc
{
public static void main(String[] args)
{
int i=0;
i=i++;
System.out.println(i);
}
}
javap -c Inc.class
Compiled from "Inc.java"
public class Inc {
public Inc();
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: iload_1 //将第二个int型本地变量推送至栈顶
3: iinc 1, 1 //将指定int型变量增加指定值(如i++, i–, i+=2等) 将局部变量区1号索引的值加1,操作数栈不发生变化
6: istore_1 //将栈顶int型数值存入第二个本地变量
7: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 获取指定类的静态域, 并将其压入栈顶
10: iload_1 ////将第二个int型本地变量推送至栈顶
11: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
14: return
结论:i=0 之后i=i++时 将i的值放入了操作数栈 然后i++ 将局部变量的i值增加了1,但是操作数栈的i并没有变化还是等于0,之后将操作数栈的值存给了局部变量的i。