这是一个很常见的自增对比。我们通常的解释是:
count++:先赋值,再自增; ++count:先自增,再赋值。
但是这个“赋值”的词汇很容易造成误解。
比如这个例子:
public class Increment {
public static void main(String[] args) {
int count = 0;
for (int i = 0; i < 100; i++) {
count = count++;
}
System.out.println(count);
}
}
输出结果为:0。
字节码执行顺序:
image.png
由上图可以看到:
第10行、iload_1将变量1的值入栈(也就是count的值0)。
第11行、iinc indexbyte constbyte的含义是将整数值constbyte加到indexbyte指定的int类型的局部变量中(也就是count++操作,此时count变量为1)。
第14行、istore_1将栈顶元素(此时栈顶元素为0)存入变量1中(变量1为count)。
总结:可以将count=count++理解为先入栈,再自增,然后将栈顶元素赋值给等号左边的count。
网友评论