29-从字节码角度分析i = i++ 和 i = ++i
2021-06-29 本文已影响0人
紫荆秋雪_文
一、分析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