黑马程序员技术交流社区

标题: 简单的自增自减打印输出代码,10个人,可能9个人答不对。 [打印本页]

作者: wang_55    时间: 2018-6-12 20:06
标题: 简单的自增自减打印输出代码,10个人,可能9个人答不对。
本帖最后由 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);


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

[hide=d500]

答:运行结果是 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 中一定要警惕这个陷阱。(-- 运算符也一样存在这个问题)

[/hide]
作者: boluofan    时间: 2018-6-12 21:47
这么牛逼吗? 我瞅瞅!
作者: 一个老李    时间: 2018-6-12 21:51
巩固概念啊,这个还真是让人纠结。
老王出品, 必属精品!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2