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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

华行天下 发表于 2013-8-15 13:49
直接count=count+1;这样就不会出现优先级的问题;

哥,你这个最后的结果只是把count自增十次后的运算结果赋给count而已,你这个结果应该也不是楼主想要的。应该是count=count+i;
回复 使用道具 举报
邪恶飞猫 发表于 2013-8-14 13:48
这里需要弄清楚java 自增的原理。首先要明确,count++是一个表达式,有返回值,它不是一个变量(再注意一遍 ...

懂了,谢谢!
回复 使用道具 举报
薛鹏鹏 发表于 2013-8-15 11:07
这个怎么理解啊?理解不了啊运行结果不是count =1?

我感觉应该可以这样理解:就是先存储给一个变量,返回的变量本身的值,而不是增加后的!
回复 使用道具 举报
forward 发表于 2013-8-19 21:09
我感觉应该可以这样理解:就是先存储给一个变量,返回的变量本身的值,而不是增加后的!
...

嗯,明白了,每次都是0赋给count
回复 使用道具 举报
看了这个问题和大家的总结,我也很疑惑,然后又查了一些资料,想把这个问题的解释理一下!
1、a++:a先创建自身的一个临时副本,然后a自增1,最后返回副本的值。
   ++a:不会创建临时副本,直接返回a加1后的值。
2、
  1. int count=0;
  2. count=count++;
复制代码
因为count++的优先级高于=,所以先计算count++,此时先在内存创建一个count的临时副本值为0,然后count加1,count的值为1。然后进行赋值运算,count++表达式返回副本里的值0,把0赋给count(此时count的值为1),结果count的值又变成0了。
下面这个程序很好的说明了问题:
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int count=0,a=1;
  6.                 a=count++;//这里a的值会被count++表达式赋值为0(count++返回的是临时副本里的0,   count的值变成了1)
  7.         System.out.println("a="+a);
  8.                 System.out.println("count="+count);//这里输出count的值为1
  9.                 }
  10. }
复制代码
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马