建议7 警惕自增的陷阱
思考一下,以下代码的结果:
int count =0;
for (int i=0; i<10; i++){
count = count++;
}
count值等于10?No,count等于0。
注意,count++的返回值是自增前的值。
程序第一次循环时的详细处理步骤:
1. JVM把count值拷贝到临时变量去。 => count值为0
2. count值加1。 => count值为1
3. 返回临时变量区的值,注意这个值是0。是变量区里面的值。 => count值为1
4. 返回值赋值给count。 => count值为0
转换为代码描述形式:
public static int mockAdd(int count){
int temp = count;
count = count + 1;
return temp;
}
所以,这个循环最终的结果仍然保持最初的状态。
这个count++的形式在不同的语言环境有不同的实现:C++中“count=count++”与“count++”等效,而PHP中则保持与Java相同。