通过字节码解释b=i++和b=++i的区别(笔记)

时间:2023-02-18 14:53:57

public class Test {
/*
test1(): 针对后++
0: bipush 10 定义常量10
2: istore_1 将常量存储到本地变量表1的位置
3: iload_1 * 将本地变量表1位置的值压入操作数栈
4: iinc 1, 1 * 将本地变量表1位置的值自增1
7: istore_1 将操作数栈的值放入到本地变量表1的位置

test2(): 针对前++
0: bipush 10 定义常量10
2: istore_1 将常量存储到本地变量表1的位置
3: iinc 1, 1 * 将本地变量表1位置的值自增1
6: iload_1 * 将本地变量表1位置的值压入操作数栈
7: istore_1 将操作数栈的值放入到本地变量表1的位置

对于b=i++的复合运算,是将i的值先放入到操作数栈,再对i自增,最后将操作数栈的值返回给变量b
对于b=++i的复合运算,是将i先自增,再将i的值放入到操作数栈,最后将操作数栈的值返回给变量b
* */
public void test1() {
int i = 10;
i = i++;
System.out.println(i); //10
}
public void test2(){
int i = 10;
i = ++i;
System.out.println(i); //11
}
}

​通过字节码解释b=i++和b=++i的区别