反编译 i++ ++i到底是个什么玩意

 代码:

package com.java;

public class Test11 {
public static void main(String[] args) {
    int i=0;
    i=i++;
}
}

反编译:

反编译 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;
    }
}

反编译:

反编译 i++ ++i到底是个什么玩意

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;
    }
}

反编译截图:

反编译 i++ ++i到底是个什么玩意

0:将常量0放入栈顶
1:将栈顶元素0给i
2:将寄存器i的值进行加1
5:将i的值放入栈顶
6:将i的值1赋值给i
因此打印i的结果是1