如题,看代码:
int a=3; 
int b=(a++)*2;
根据java运算符的优先级来看,()的优先级应该高于++运算符,那么运行过程应该是先将a自增,再乘2,b的值应该是8,但是正确结果却是6,why?请赐教!

解决方案 »

  1.   

    因为a是先运算  在自增的  也就是说a++的时候 a=3 然后3*2=6
    这时候你再去打印a的话  又才变成4
    和++a是反着的  不过++a就起不到这种骗人的效果了
      

  2.   

    int b=(a++)*2;   
    a++ 先运算(取a++的值,然后a再自增)再*2有什么问题吗
      

  3.   

    int b=(a++)*2; 
    等价于:
    int b=a*2; 
    a++;

    int b=(++a)*2; 
    等价于:
    a++;
    int b=a*2; 
    语法基础
      

  4.   


    你试试
    int b = (a++);
    int b = a++;有区别么?
    没有吧
      

  5.   

    不用括号 int b = a++ *2;
    应该也一样吧
      

  6.   

    int b=(a++)*2; 
    先计算括号里表达式的值。
    括号里表达式为
    a++因为++ 在后面,所以先计算a的值,在整个表达式计算完以后,a才会自增。
    此时a的值为3
    3*2 = 6
    此时a自增为4
      

  7.   

    a++是先取a的值,然后再进行a的自增,也就是取得是自增前的值
      

  8.   


    不对.比如 int a = 3;
             int b = (a++) * (a++);
    前面一个a是3,后面一个a是4,b = 12第一个(a++)中,先计算括号里对吧,括号里是a++,就先计算a咯,那(a++)就等于3了,此后a才自增
    第二个(a++)中,同上,不过此时a已经为4了,因为前面自增过了如果是 int b = (a++) * (++a); 
    b就为15了当然现实代码最好不要这样写,这样写会让别人看不懂
    就像上式:
    写的时候就要拆成 int b = a;
                       a++;
                       a++;
                       b *=a;
    这样别人看代码一目了然
      

  9.   


    这位,这里b=12是不正确的,a++是在使用a之后再自增1,因此b=9,a=5