黑马程序员技术交流社区

标题: 请大神看一下这个代码中sum的值 [打印本页]

作者: 凌端浩    时间: 2015-8-28 00:56
标题: 请大神看一下这个代码中sum的值
class  AddAdd
{
        public static void main(String[] args)
        {
            int sum = 1;
            System.out.println(sum=sum++);//输出1
            System.out.println(sum);//输出1
        }
}
请问sum赋值之后自增,应该为2,为什么sum 变为2以后又变回1?


作者: 无云    时间: 2015-8-28 01:48
sum++的原理可以写成两步, int temp=1,sum = sum +1; 这两步执行完后sum的值是2,但由于sum++是先赋值后自增,他会把变量temp的值赋给sum,也就是说sum++执行后sum已经变成2了,但是又被temp的值给覆盖掉了,变成了1,这样解释能理解吗?
作者: zhengshunfu    时间: 2015-8-28 02:36
楼上正解
作者: 凌端浩    时间: 2015-8-29 12:18
无云 发表于 2015-8-28 01:48
sum++的原理可以写成两步, int temp=1,sum = sum +1; 这两步执行完后sum的值是2,但由于sum++是先赋值后 ...

终于明白了这个问题,谢了
作者: lilaishun    时间: 2015-8-29 12:26
楼上正解
作者: 荣斌    时间: 2015-8-29 12:41
楼上正解
作者: yaochaoyang    时间: 2015-8-29 13:28
sum的值是没有变化,sum++是2
作者: SYAD    时间: 2015-8-29 13:43
因为++的运算符优先级高于 = ,而++是放变量后面的,sum++返回是1
作者: cc3441251    时间: 2015-8-29 14:08
无云 发表于 2015-8-28 01:48
sum++的原理可以写成两步, int temp=1,sum = sum +1; 这两步执行完后sum的值是2,但由于sum++是先赋值后 ...

这个temp=1是怎么来的 我有点不清楚  还没懂  第二句System.out.println(sum);按我的理解应该是2啊,请帮我再解释一下,谢谢
作者: Integer    时间: 2015-8-29 14:46
cc3441251 发表于 2015-8-29 14:08
这个temp=1是怎么来的 我有点不清楚  还没懂  第二句System.out.println(sum);按我的理解应该是2啊,请帮 ...

首先,你要理解sum = sum++ 后台的运算过程:
第一步,计算sum++,sum++ = 1,此时 计算机内存中sum的值是2
第二步,计算sum = sum++, 这里是赋值运算,要从右往左进行计算,等于号的含义就是把右边的数值赋值给左边,那么第一步我们得到了sum++为1,然后我们就要把得到这个整型值1赋值给右边的sum,所以sum=1,这时内存中相当于是重置了sum的值。

作者: 三井寿    时间: 2015-8-29 14:51
同意遗漏说的,说的非正常。
作者: 牛小爽    时间: 2015-8-29 15:27
Integer 发表于 2015-8-29 14:46
首先,你要理解sum = sum++ 后台的运算过程:
第一步,计算sum++,sum++ = 1,此时 计算机内存中sum的值是 ...

解释的很好,通俗易懂
作者: Florida2015    时间: 2015-8-29 16:14
无云 发表于 2015-8-28 01:48
sum++的原理可以写成两步, int temp=1,sum = sum +1; 这两步执行完后sum的值是2,但由于sum++是先赋值后 ...

我看了之后还是有点不明白
作者: 血马雄风    时间: 2015-8-29 16:19
赋值语句
作者: jlz890220    时间: 2015-8-29 16:33
这样可能更好理解:
int sum = 1;
int b;
b = sum++;
sum = b;
这里边的b是1,而第三步和第四步之间的这个时间里sum是2,第四步又把sum变成1
基本就这样吧
作者: a1ccwt    时间: 2015-8-29 17:40
先加加和后加加的区别,练习一下就知道了  




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