int k=0;k=k++;结果等于0,为什么?
int k = 0;
k = k++;
这两行代码对应的字节码为:
iconst_0 // 将 int 常量 0 推到操作数栈
istore_1 // 将操作数栈栈顶的int数存储到局部变量索引为 1 的 int 变量中
iload_1 // 将局部变量索引为1的 int 值压入操作数栈
iinc 1 by 1 // 语法 iinc [index] by [value], 将局部变量索引为 1 的int 值增加 1
istore_1 // 将操作数栈栈顶的int数存储到局部变量索引为 1 的 int 变量中
这里推荐一个IDEA插件:
jclasslib Bytecode Viewer
这款插件可以帮助我们更清楚的去查看字节码。使用方式:将鼠标的光标 focks 到你需要得到字节码的代码类中,然后选择IDEA菜单:view -> Show Bytecode With Jclasslib