A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 wang_55 于 2018-6-12 21:21 编辑


请大家忽略代码的正规格式开头,直接看下面的for循环,以及打印语句。

请问,这段命令,不要自己去偷偷运行哟!最后输出的count=几?


[Java] 纯文本查看 复制代码
int count = 0;
for(int i=0;i<100;i++){
     count = count++;
}
System.out.println("count="+count);


答案隐藏了,请回帖写下你的答案,再和正确答案对照。同时我会给出答案的解释。

答:运行结果是 count = 0。

首先 count++ 是一个有返回值的表达式,返回值是 count 自加前的值,Java 对自加处理的流程是先把 count 的值(不是引用)拷贝到一个临时变量区,然后对 count 变量加1,接着返回临时变量区的值。
所以上面代码块中第一次循环的执行步骤是 JVM 把 count 值(0)拷贝到临时变量区,然后 count 值加 1,这时 count 的值是 1,接着返回临时变量区的值(值是 0),最后返回值赋值给 count,此时 count 值被重置成 0;所以上面代码语句 count = count++; 可以按照如下代码来理解:


[AppleScript] 纯文本查看 复制代码
   
 int autoAdd(int count) {
        int temp = count;
        count = count +1;
        return temp;
    }


所以第一次循环后 count 的值还是 0,其他 99 次的循环也是一样的,最终导致 count 的值始终没有改变,仍然保持着最初的状态;如果想要打印结果为 100 则需要修改 count = count++; 语句为 count++; 即可。因此对于 ++/-- 运算在 java 中一定要警惕这个陷阱。(-- 运算符也一样存在这个问题)

2 个回复

倒序浏览
这么牛逼吗? 我瞅瞅!
回复 使用道具 举报
巩固概念啊,这个还真是让人纠结。
老王出品, 必属精品!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马