
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到底有什么不同,导致最后输出的不同.




近期评论