课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > java程序员:警惕自增的陷阱
  • java程序员:警惕自增的陷阱

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

  • 昆明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++"与"c ount++"是等效的,而在PHP中保持着与JAVA相同的处理方式。每种语言对自增的实现方式各不相同。

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

    推荐文章

上一篇:覆写变长方法也循规蹈矩

下一篇:不要让旧语法困扰你

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56