黑马程序员技术交流社区

标题: java中()的优先级不是最高的么? [打印本页]

作者: wahaha    时间: 2013-2-26 22:52
标题: java中()的优先级不是最高的么?
本帖最后由 夏添 于 2013-3-11 21:21 编辑

今天碰到一道小题,求解释..  之前一直觉得()的优先级是最高的,直到...
class Demo
{
        public static void main(String[] args)
        {
                int a = 2;
                int b = a+++(a*3);
        System.out.println(b);
        }
}

打印结果是11..可以推断运算过程是  b = 2+(3*3)..但是请问为神马是这样的运算过程??
网上查了关于java的优先级问题,没有唯一标准....

作者: Benwolf0818    时间: 2013-2-26 23:02
优先级是相对的,b=2+(3*3),2是取得a的值,第一个3是a++,因为++的优先级高于()的优先级
作者: Benwolf0818    时间: 2013-2-26 23:05
你可以搜java运算符优先级表看看
作者: wahaha    时间: 2013-2-26 23:17
本帖最后由 夏添 于 2013-2-26 23:20 编辑
崔芝鲁 发表于 2013-2-26 23:02
优先级是相对的,b=2+(3*3),2是取得a的值,第一个3是a++,因为++的优先级高于()的优先级 ...

同学..好像不对吧?
优先级最高的是.      []      {}      ,  这四个
++    --    ~   !这四个排在第二优先级
参阅 java 就业培训教程---张孝祥   第二章    P.51
张老师说其中的原因难以理解...
作者: amen0205    时间: 2013-2-27 00:00
优先级最高的是 .  []  ()  不过这道题是这么理解的  a+++(a*3) 化为 (a++)+(a*3)  +号的结合性是从左到右  所以先计算 a++ 得3  ,在计算 a*3 得9,同学那不是就是12吗?  不是  因为++的结合性是从右到左  所以参加加法运算的是a,这和 int a=3,b;  b=a++;  b得3一个道理。所以最后得11
作者: Benwolf0818    时间: 2013-2-27 00:02
本帖最后由 崔芝鲁 于 2013-2-27 00:04 编辑
夏添 发表于 2013-2-26 23:17
同学..好像不对吧?
优先级最高的是.      []      {}      ,  这四个
++    --    ~   !这四个排在第二优 ...

是这样的




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