java i++,++i

i++

  观察如下代码

public class demo{
    public  static void main(String[] args){
        int i = 0;
        i = i++;
        System.out.println(i);

    }
} 

  最开始的时候我觉得很糊涂为何输出为0呢?不是应该为1的吗,后来经过javap反编译后了解到其内在.
  反编译后有如下关键代码

  • iconst_0(将int型0推入栈顶)
  • istore_1(将栈顶变量存入到第二个本地变量 ps:本地变量索引下标从0开始)
  • iload_1(将本地变量表里第二个变量推入到栈顶)
  • iinc 1,1(将第二个本地变量执行+1)
  • istore_1(将栈顶变量存入到第二个本地变量)
  • iload_1(将本地变量表里第二个变量推入到栈顶)
  • return(返回栈顶)

++i

  而将i++改为++i后,代码输出为1,,这又是为何,观看下字节码

  • iconst_0
  • istore_1
  • iinc 1, 1
  • iload_1
  • istore_1
  • iload_1
  • return

可以看到i++和++i到底有什么不同,导致最后输出的不同.