public static void main(String[] args) {
int j = 0;
j = j++;
}
这段代码的结果是0.从字节码指令的角度来分析下。
在讲字节码之前,先简单的了解下Java栈,在JVM中有这么一个数据结构叫Java栈,当线程启动的时候,会分配一块内存当做该线程的栈,每个栈由一系列的栈帧组成。每个栈帧对应一个方法,当线程执行方法时,就是栈帧出栈入栈的过程。
每个栈帧包含三部分数据:本地变量(参数+方法内的变量)、操作数栈和其它数据,本文主要涉及本地变量和操作数栈。
image.png1.普通的赋值操作。
0234是a,b变量的初始化操作
5 iload_2 把b变量的值放入栈
6 istore_1 把栈的值赋值给变量a
image.png2.i=i++
2 iload_1 把变量i的值入栈
3 iinc 1 by 1 遍量i自增 i=1
6 istore_1处栈,把栈中的值赋值给变量i i=0
网友评论