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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© panningwjr 中级黑马   /  2013-8-14 12:03  /  4097 人查看  /  25 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面一段代码
  1. int count = 0;  
  2.         for (int i = 0; i < 10; i++) {  
  3.             count = count++;  
  4.         }  
  5.         System.out.println(count);  
复制代码
count的打印结果是0,不能理解,谁能帮忙解释下!

评分

参与人数 1技术分 +1 收起 理由
张俊生 + 1 神马都是浮云

查看全部评分

25 个回复

倒序浏览
首先,咱们要明确count++是先把赋值,再进行自加,所以循环第一遍的时候下来count的值还是0,因为count初始化为0,把0赋给0当然还是零,虽然等号右边的count++,但是也没有改变count的值
  1. for (int i = 0; i < 10; i++) {  
  2.           count++;  //或者count = ++count;
  3.         }  
复制代码
这样count的值就改变了。

评分

参与人数 1技术分 +1 收起 理由
张俊生 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
我想知道,这段代码是你全部代码吗?我觉得这块代码没问题,而且结果不应该是0,还有其他的代码吗?包括其它类中的,贴出来看看!
回复 使用道具 举报
曹满林 发表于 2013-8-14 12:20
我想知道,这段代码是你全部代码吗?我觉得这块代码没问题,而且结果不应该是0,还有其他的代码吗?包括其 ...

这段代码有问题的,1楼正解
count = count++;是先赋值再加1;
++count是先加1再赋值
回复 使用道具 举报
本帖最后由 曹满林 于 2013-8-14 12:34 编辑
冒烟的芒果 发表于 2013-8-14 12:22
这段代码有问题的,1楼正解
count = count++;是先赋值再加1;
++count是先加1再赋值 ...


难道他说的解决了你的问题?我知道他说的是正确的,但是这个解决了你的问题了?我有些不懂了,求解
回复 使用道具 举报
曹满林 发表于 2013-8-14 12:31
难道他说的解决了你的问题?我知道他说的是正确的,但是这个解决了你的问题了?我有些不懂了,求解 ...

哦,原来你写的不是count++,而是count=count++;真是奇怪的写法,呵……
回复 使用道具 举报
  1. int count = 0;  
  2.         for (int i = 0; i < 10; i++) {  
  3.             count = count++;       //哥哥,你不停地把0赋给count确实很好玩
  4.         }  
  5.         System.out.println(count);  
复制代码
但是你明明知道i++是什么意思,却写出个count=count++来又是什么意思
count把自己=0的初始值赋给了下一个count,然后自己再自增,但自增的结果没有赋出去,你不坑爹嘛
回复 使用道具 举报
yangxin540 发表于 2013-8-14 12:12
首先,咱们要明确count++是先把赋值,再进行自加,所以循环第一遍的时候下来count的值还是0,因为count初始 ...

把0赋给0懂了,有个疑惑就是count++后count应该有一个时候是1,这个1跑哪去了?
回复 使用道具 举报
单凯 中级黑马 2013-8-14 14:11:23
9#
panningwjr 发表于 2013-8-14 13:45
把0赋给0懂了,有个疑惑就是count++后count应该有一个时候是1,这个1跑哪去了? ...

是内存机制的问题,后++是先进行取值操作,内存对0进行临时保存,然后对count加1,但是赋值操作还没有做呢,赋值操作的结果就是把内存中临时保存的0赋给了count,所以count最后的值变成了0,所以自增操作是有做的,只是被赋值操作覆盖掉了

点评

这是正确的解释  发表于 2013-8-19 08:01

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
panningwjr 发表于 2013-8-14 13:45
把0赋给0懂了,有个疑惑就是count++后count应该有一个时候是1,这个1跑哪去了? ...

因为是把0赋给了0,所以count的值根本就没有改变,下次循环还是0.我是这样理解的,把0赋给0后,参与循环的count值已经确定了。
回复 使用道具 举报
我感觉9楼说的有意思!有点明白!
回复 使用道具 举报
楼主您好,你的问题要是解决了,请把帖子更改为已解决,谢谢合作!
回复 使用道具 举报
我感觉9楼说的有点意思!
回复 使用道具 举报
其实一直都是count把初始值0一次又一次的赋给左边的count,也就是0一直在赋给0,这个问题确实有趣。
回复 使用道具 举报
局部变量,局部有效呗,非要得其值,加个return返回值就行了哇。当然封装下,好些。
回复 使用道具 举报
forward 发表于 2013-8-14 22:26
我感觉9楼说的有意思!有点明白!
  1. 我完整地用代码展示一遍吧。count++这个表达式可以这样来理解
  2. public static int Add(int count)
  3.     {
  4.         int temp = count;
  5.         count = count + 1;
  6.         return count;
  7.     }
复制代码
这个怎么理解啊?理解不了啊运行结果不是count =1?

回复 使用道具 举报
我们来看看几个小细节:
  1. int count=0;
  2. System.out.println(count++);
复制代码
此结果为0;
再看看
  1. int count = 0;
  2. count++;
  3. System.out.println(count);
复制代码
此结果为1;
此题也就是,count++还没有改变值的时候又赋值给了自己,那么结果当然为初始值0了。
我的理解是count++只有在后面有";"的时候,也就是完全执行的时候才会自增1;
当然9楼理论很像try中的return跟finally谁先执行,
还有哪些类似的例子,楼下补上!!
回复 使用道具 举报
直接count=count+1;这样就不会出现优先级的问题;
回复 使用道具 举报
你这个count是先进行赋值运算再自增的 ,然后每次都是0赋值给count最后肯定还是0
回复 使用道具 举报
你这个count肯定是0嘛,i和count根本就没关系啊。你的自增变量是i啊。其实你想写的程序是这样的:其他都不变,把count=count+i;就可以了。就会得到你想要的结果。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马