改善Java程序建议7
2017-02-23 本文已影响10人
KUN叔
建议7: 警惕自增的陷阱
先看代码:
public class Client {
public static void main(Sring[] args){
int count = 0;
for(int i = 0; i < 10; i++){
**count = count ++**
}
System.out.println("count=" + count);
}
}
运行结果count等于0。
首先,count++是一个表达式,是有返回值的,它的返回值就是自加前的值,Java是这样处理的:首先把count的值拷贝到一个临时变量区,然后对count变量加1,最后返回临时变量区的值。详细处理步骤如下:
步骤1: JVM把count值(其值是0)拷贝到临时变量区。
步骤2: count值加1,这时候count的值是1。
步骤3: 返回临时变量区的值,注意这个是0,没有修改过。
步骤4: 返回值赋值给count,此时count值被重置成0。
解决办法:只要把“count = count++”修改成“count++”即可。
但是该问题在不同的语言环境有不同的实现,C++中的“count=count++”与“count++”是一样的,PHP则跟Java处理方式相同。