反编译 i++ ++i到底是个什么玩意
代码:
package com.java;
public class Test11 {
public static void main(String[] args) {
int i=0;
i=i++;
}
}
反编译:
0:就是 先将常量0放入栈中
1:将栈顶元素0取出给i
2:将i的值0推送到栈顶
3:将寄存器i值进行加1覆盖寄存器i的原始值
4:将栈顶元素0赋值给i
因此最终结果 如果打印i 结果是0
如果真的向我们说的i=i++就是i=i;i=i+1 会比上边反编译多一次存栈和取栈的过程
代码:
public class Test11 {
public static void main(String[] args) {
int i=0;
i=i;
i=i+1;
}
}
反编译:
0:将常量0放入栈顶
1:将栈顶0取出给变量i
2:将变量i的值0放入栈顶
3:将栈顶值0给i
4:将变量i的值0放入栈顶
5:将常量1放入栈顶
6:取出栈top元素和top-1元素进行相加得1放入栈顶
7:取出栈顶1给i
因此打印结果i是1
下面我们再看看++i的过程是个什么样
代码:
public class Test11 {
public static void main(String[] args) {
int i=0;
i=++i;
}
}
反编译截图:
0:将常量0放入栈顶
1:将栈顶元素0给i
2:将寄存器i的值进行加1
5:将i的值放入栈顶
6:将i的值1赋值给i
因此打印i的结果是1