i++、++i、i = i++、i = ++i解惑
相关字节码指令
iconst:将一个(-1~5的int型常量)常量加载到操作数栈(当int取值-1~5采用iconst指令,取值-128~127采用bipush指令,取值-32768~32767采用sipush指令,取值-2147483648~2147483647采用 ldc 指令。)
iload:从局部变量表中加载int型的数据到操作数栈中
istore:将一个int型数据从操作数栈存储到局部变量表
iinc:局部变量自增指令
i++
public void test1() {
int i = 0;
i++;
}
0 iconst_0
1 istore_1
2 iinc 1 by 1 局部变量表中i自增
5 return
++i
public void test2() {
int i = 0;
++i;
}
0 iconst_0
1 istore_1
2 iinc 1 by 1 局部变量表中i自增
5 return
i = i++
public void test3() {
int i = 0;
i = i++;
}
0 iconst_0
1 istore_1
2 iload_1 将i压入操作数栈
3 iinc 1 by 1 局部变量表中i自增
6 istore_1 将操作数栈中的i赋值到局部变量表(未自增前的值)
7 return
i = ++i
public void test4() {
int i = 0;
i = ++i;
}
0 iconst_0
1 istore_1
2 iinc 1 by 1 局部变量表中i自增
5 iload_1 将i压入操作数栈(已自增的值)
6 istore_1 将操作数栈中的i赋值到局部变量表
7 return
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。