黑马程序员技术交流社区

标题: 关于计算中的赋值和优先级问题 [打印本页]

作者: 逆袭的风    时间: 2013-7-31 22:48
标题: 关于计算中的赋值和优先级问题
本帖最后由 逆袭的风 于 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然后运算.
这是为什么?


作者: 手心里的温柔    时间: 2013-7-31 23:00
c: ++a    a自加一后a的值变为6  2*6+6=18
d:  b的初始值为5 然后b自加一后b值为6   5+2*6=17


希望能帮到你 共同学习哈
作者: 柏圣杰    时间: 2013-7-31 23:29
这个是涉及到前++和后++运算的优先问题;

前++和后++在单独的语句中两个的效果是一样的.
如: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



作者: dicegame    时间: 2013-7-31 23:36
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




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