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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a6658637 中级黑马   /  2015-9-7 00:40  /  552 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Test {
        public static void main(String[] args) {
                int sum = 0;
                int y = 0;
                for (int i = 0;i < 10 ;i++ ) {
                        sum=sum++;
                        y=sum++;
                }
                System.out.println(sum);//10
                System.out.println(y);//9
        }
}   
为什么答案输出的是10和9?求大神解释

13 个回复

倒序浏览
sum=sum++; 这个永远是在一个值  
因为先把sum这个值存保存到一个域  等表达式运行完 在把sum赋给sum  结果还是0

y=sum++;  
那这个你能理解了把  sum++把运行之前的值赋给了y  所以y是9  sum是10
回复 使用道具 举报
最后一步是sum自+1 打印输出, y直接输出sum 所有最后结果是sum=10,y=9;
回复 使用道具 举报
sum++的意思是把sum的值加1后重新付给sum。其中如果是y=sum++,那么这个公式的运算顺序是:先把sum的值付给y,然后sum再自己+1后付给sum。所以y要比sum少1.
回复 使用道具 举报
你想要的结果应该都是9
但是 循环最后 y=sum++;这一句sum=9赋值给力y,再自加保存就是sum=10了

点评

如果是按计算顺序先赋值在加,,那为什么sum=sum++ 不是sum赋值给sum 在加了?  发表于 2015-9-7 19:20
回复 使用道具 举报
楼上正解
回复 使用道具 举报
   把 a++  和 ++a 放一起理解比较好
回复 使用道具 举报
谢谢分享,学习了。
回复 使用道具 举报
你在for 之前就初始化int y= o   int  sum=0
    第一次for循环     sum=sum++   等于  1  逻辑: sum++等价于(0++)在赋值给sum     输出  为 1  
                                 y=sum++   此时已经y被初始化等于0了,  直接输出 0

回复 使用道具 举报
楼上正解
回复 使用道具 举报
洋葱头头 发表于 2015-9-7 09:42
sum=sum++; 这个永远是在一个值  
因为先把sum这个值存保存到一个域  等表达式运行完 在把sum赋给sum  结 ...

嗯嗯,今天老师解答了,sum=sum++其实就是一句废话,不用看的,顿时恍然大悟
回复 使用道具 举报
顶一下、、、、、、
回复 使用道具 举报
直接忽略 y=sum++;   +1之前的一个运算
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马