demo:
public class CountTest {
private int value;
public void add() {
++value;
}
}
使用javac编译CountTest.Java文件
javac CountTest.java
获得CountTest.class文件。
再使用javap -c命令反编译CountTest.class文件
javap -c CountTest.class
看看它的汇编代码,如下:
从汇编代码中可以发现,++value被拆分成了2,5,6,7四个步骤,第2步获取当前value的值并放入栈顶,第5步把常量1(因为是+1)放入栈顶,第6步是把两个值相加,然后再把结果放入栈顶,第7步是把栈顶的结果值赋值给变量value。
总结
通过汇编代码可以看到,++value实际上做了4步操作,所以该操作不是原子性的。