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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 逆袭的风 中级黑马   /  2013-7-31 22:48  /  1400 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 逆袭的风 于 2013-7-31 23:36 编辑

运行如下程序:
class Test
{
        public static void main(String[] args)
        {
                int a=5;
                int b=5;
                int c=2*(++a)+a;
                int d=b+2*(++b);
                System.out.println("a="+a+"\tb="+b+"\tc="+c+"\td="+d);  
        }
}

/*
运行结果
a=6        b=6  c=18  d=17
*/
c和d中的赋值和计算的先后顺序是什么?
按结果来看c中a是先自加一然后参与运算,而d中b前面先赋值2,后面有自加1然后运算.
这是为什么?

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

3 个回复

倒序浏览
c: ++a    a自加一后a的值变为6  2*6+6=18
d:  b的初始值为5 然后b自加一后b值为6   5+2*6=17


希望能帮到你 共同学习哈

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
这个是涉及到前++和后++运算的优先问题;

前++和后++在单独的语句中两个的效果是一样的.
如:a++;和++a;效果一样
在跟其他运算在一个语句中运算时有区别
区别在于:
              前++,是先计算自增,如 int x,b=1;  x=++b+b+b;其中的b自增1然后参与运算,即其中的b都换成2,参与运算
              后++,是先计算其他的语句,语句结束后,再自增1..如int x,b=1;   x=b+b+b++;  其中的b都是以1参与运算,这条语句结束后,b再变成2


回复 使用道具 举报
int c=2*(++a)+a;
int d=b+2*(++b);
运算时有优先级,但扫描表达式时没有优先级
计算c时,从左到右扫描,先碰到++a,这时a变成了6,然后碰到a(此时a的值已变为6)
所以c = 2*6+6=18
计算d时,先碰到b,这个b的值为5,然后碰到++b,这时b的值变为了6(但前面的b仍然是5)
所以c = 5+2*6=17
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马