本帖最后由 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 中一定要警惕这个陷阱。(-- 运算符也一样存在这个问题) |