改善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处理方式相同。

上一篇下一篇

猜你喜欢

热点阅读