正如许多开发人员所知,增量运算符不是原子的。
例如:
public void incrementId(){ // id being an int field
id++;
}
实际上,这对应于三个不同的操作:
int temp = id;
id = id + 1;
id = temp;
此外,此方法的行为类似:
public void incrementId(){ // id being an int field
id = id + 1; // three steps also here
}
我的问题是:
两种操作在幕后的真正区别是什么:
id = id + 1; //three steps => non atomic
id = anotherIntVariable + 1; // one step => atomic
什么概念迫使编译器将第一个转换为 3 个步骤而不是另一个?