昆明java培训
达内昆明广州春城路

18487146383

热门课程

java程序员:警惕自增的陷阱

  • 时间:2016-09-30
  • 发布:昆明Java培训
  • 来源:达内新闻

昆明Java培训机构的老师记得大学刚开始学C语言时,老师就说:自增有两种形式,分别是i++和++i,i++表示的先赋值后加1,++i是先加1后赋值,这样理解了很多年也木有问题,直到遇到如下代码,我才怀疑我的理解是不是错了:

1 public class Client7 {

2    public static void main(String[] args) {

3        int count=0;

4        for(int i=0; i<10;i++){

5            count=count++;

6        }

7        System.out.println("count = "+count);

8    }

9 }

这个程序输出的count等于几?是count自加10次吗?答案等于10?可以肯定的说,这个运行结果是count=0。为什么呢?

count++是一个表达式,是由返回值的,它的返回值就是count自加前的值,Java对自加是这样处理的:首先把count的值(注意是值,不是引用)拷贝到一个临时变量区,然后对count变量+1,最后返回临时变量区的值。程序第一次循环处理步骤如下:

JVM把count的值(其值是0)拷贝到临时变量区;

count的值+1,这时候count的值是1;

返回临时变量区的值,注意这个值是0,没修改过;

返回值赋给count,此时count的值被重置为0.

"count=count++"这条语句可以按照如下代码理解:

1 public static int mockAdd(int count) {

2        //先保存初始值

3        int temp = count;

4        //做自增操作

5        count = count + 1;

6        //返回原始值

7        return temp;

8    }

于是第一次循环后count的值为0,其它9次循环也是一样的,最终你会发现count的值始终没有改变,仍然保持着最初的状态.

此例中代码作者的本意是希望count自增,所以想当然的赋值给自身就可以了,不曾想到调到Java自增的陷阱中了,解决办法很简单,把"count=count++"改为"count++"即可。该问题在不同的语言环境中有着不同的实现:C++中"count=count++"与"count++"是等效的,而在PHP中保持着与JAVA相同的处理方式。每种语言对自增的实现方式各不相同。

了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

上一篇:覆写变长方法也循规蹈矩
下一篇:不要让旧语法困扰你

上java培训有用吗?怎么衡量?【达内培训】

昆明java培训机构怎么选?昆明达内java培训怎么样?

学Java自学还是达内培训机构好?

0基础学java垃圾代码回收站【达内编程培训】

选择城市和中心
贵州省

广西省

海南省

台湾