JVM_虚拟机栈_局部变量表和操作栈_字节码
要正确理解Java的代码的执行步骤,需要去看其解析出来的字节码的执行顺序是什么样的.
就比如我们常见的j=i++和j=++i的问题.就是局部变量表和操作栈_字节码
这几个的关系决定 了他们的不同的结果.
public class Test1 {
public static void main(String[] args) {
int i = 1;
/*
这里涉及到jvm的
//1.i放入操作数栈,操作数栈里面为1;
2.局部变量表中,i进行++,局部变量表中i=2;
3.操作数栈的结果,回写到局部变量表中,所以局部变量表中i又变成了1;
*/
i = i++;System.out.println("i1=" + i);//i1=1
int j = 1;
j++;
System.out.println("j1=" + j);//j1=2
int k = i ++;
System.out.println("k1=" + k);//k1=1
int e = 1;
int f = ++e;
System.out.println("e1=" + e);//e1=2
System.out.println("f1=" + f);//f1=2
}
}
可以理解为: i = i++;
等价于下述的代码
temp =i;
i++;
i=temp;