黑马程序员技术交流社区

标题: sum++ ++sum [打印本页]

作者: 微笑的背后3    时间: 2015-8-27 23:53
标题: sum++ ++sum
class Demo{
                    public static void main(String[] args){
                          int sum = 1;
                          System.out.println(sum++ + ++sum);
                    }
}
思路1:先运行++sum,运行后sum  = 2,然后sum++中的sum就是2,所以就是2+2,输出结果为4
思路2:先读取sum++,读取后sum++还是1,然后自运行一次,sum = 2,所以++sum的值就是3,再
           所以运行后应该是1+3,输出结果为4
这是我跟我室友的两个思路,求大神们解答这两个思路哪个是正确的?

作者: BG6FVG    时间: 2015-8-27 23:57
第二个吧
作者: 向上    时间: 2015-8-28 00:05
我的想法是思路2.我也不清楚,今天是老师布置得作业
作者: 凌端浩    时间: 2015-8-28 00:43
应该是第二个吧
作者: 凌端浩    时间: 2015-8-28 00:52
int sum = 1;
System.out.println(sum++ + sum);//输出3,应该是先读取sum++,同思路二

作者: 心之谷96    时间: 2015-8-28 07:38
应该是第二个是对的。。。
作者: t_lins    时间: 2015-8-28 08:00
嗯 我觉得第二个
作者: 齐伟超    时间: 2015-8-28 08:43
debug  之后   sum的确是先   3 然后变成的4所以是2   
        main{
                int sum = 1;
                int i;
               System.out.println(i=sum++ + ++sum);
               System.out.println(i);
        ]
不运行你知道i输出的是几么
作者: ln0491    时间: 2015-8-28 09:14
第二个是对的
作者: Glc90    时间: 2015-8-28 09:17
关于++的用法 这里是参与运算的规则 ++在前是先自增1然后在带入运算 ++在后是先带入然后再自增 所以这里应该是1+3
作者: 嗜血冥命    时间: 2015-8-28 09:57
这不是运算符的事情么。运算符的先后顺序,是先++的,再做加法运算的,然而++单独用的时候不管是先++还是后++效果都是一样的哈。所以呢当做++运算的时候就会自动加一,也就是等于2+2了,结果为4
作者: 疯疯疯疯疯子    时间: 2015-8-28 12:15
路过!!!!1
作者: a80C51    时间: 2015-8-28 12:51
这个问题,是不是要考虑下编译原理?
另外,+的运算顺序是自右向左结合吧?
同时,++的优先级高于+,所以,个人认为应该是4=3+1
作者: a80C51    时间: 2015-8-28 12:52
不对,应该是4=2+2,不是3+1
作者: kuikui    时间: 2015-8-28 13:04
应该是第二个
作者: Florida2015    时间: 2015-8-28 16:15
第二个,其实可以再写个System.out.println(++sum + ++sum);两条输出语句同时输出,通过看结果就可以验证是第几个思路了!!!
作者: 王小吉    时间: 2015-8-28 17:16
本帖最后由 王小吉 于 2015-8-28 17:21 编辑

(1)第一个sum抽出来。等待运算(2)第二个sum++此时sum变成2。
( 3)第一个抽出来等待运算的sum此时也变成了2然后和第二个sum相加 结果是4.
    最后一步。第一个sum(此时是2)然后去++ 变成了3.只不过没有输出语句

作者: 王小吉    时间: 2015-8-28 17:17
齐伟超 发表于 2015-8-28 08:43
debug  之后   sum的确是先   3 然后变成的4所以是2   
        main{
                int sum = 1;

你这个多此一举没必要再弄个变量i
作者: 王小吉    时间: 2015-8-28 17:18
a80C51 发表于 2015-8-28 12:52
不对,应该是4=2+2,不是3+1

你这个是正解 我同意你
作者: llwhcm    时间: 2015-8-28 18:46
思路2正确。验证一下
sum++ + ++sum  =1+3
sum++ + sum++  =1+2
++sum + ++sum  =2+3
++sum + sum++  =2+2
思路就会清晰了
作者: 齐伟超    时间: 2015-8-28 19:31
王小吉 发表于 2015-8-28 17:17
你这个多此一举没必要再弄个变量i

那你知道i是几么    我只是出个问题
作者: lcq0301    时间: 2015-8-28 19:34
第一个吧    从右往左看
作者: Vincent饭饭    时间: 2015-8-28 19:38
The second is right~
作者: 安仔    时间: 2015-8-28 19:53
之前优先级的回答应该是错的,我直接让表达式打印出来的结果是13,个人猜测是num++编译器认为是1,因为下来要进行运算,所以就自增了。所以++num编译器的结果就是3了,两者相加就为4.
作者: ruili    时间: 2015-8-28 20:25
应该是第二种的
作者: 15863453752    时间: 2015-8-28 20:28
怎么可能先运行++sum, 程序运行是有运算规则的,是从左到右去执行的,除非遇到优先级较高的先执行,优先级相同时从左往右执行.所以第二个靠谱!
作者: 牛小爽    时间: 2015-8-28 21:55
llwhcm 发表于 2015-8-28 18:46
思路2正确。验证一下
sum++ + ++sum  =1+3
sum++ + sum++  =1+2

回答的好棒~~~~~~~~~手动赞一个
作者: 笑笑精灵    时间: 2015-8-28 22:37
我认为第一个正确




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