一、分析i = i++
- 代码
public void method9() {
int i = 10;
i = i++;
}
- 字节码
0 bipush 10
2 istore_1
3 iload_1
4 iinc 1 by 1
7 istore_1
8 return
- 字节码分析
-
0 bipush 10:将常量10加载到操作数栈
image.png
-
2 istore_1:将操作数栈顶数据存储到局部变量表下标为1的位置上
image.png
-
3 iload_1:将局部变量表下标为1中的数据加载到操作数栈中
image.png
-
4 iinc 1 by 1:将局部变量表下标为1中的数据+1
image.png
-
7 istore_1:将操作数栈中栈顶数据存储到局部变量表中下标为1的位置上
image.png
- 小结
- 1、i的值依然是10
- 2、i的值有那么一刻为11
二、分析i = ++i
- 代码
public void method10() {
int i = 10;
i = ++i;
}
- 字节码
0 bipush 10
2 istore_1
3 iinc 1 by 1
6 iload_1
7 istore_1
8 return
-
0 bipush 10:将常量10加载到操作数栈中
image.png
-
2 istore_1:将操作栈栈顶数据存储到局部变量表中下标为1的位置中
image.png
-
3 iinc 1 by 1:将局部变量表中下标为1的数据+1
image.png
-
6 iload_1:将局部变量表下标为1中的数据加载到操作数栈中
image.png
-
7 istore_1:将操作数栈中栈顶数据存储到局部变量表下标为1的位置上
image.png
-
小结
- i的值为11
网友评论