黑马程序员技术交流社区

标题: 运算符的优先级问题? [打印本页]

作者: 寇弘禄    时间: 2013-3-23 14:55
标题: 运算符的优先级问题?
本帖最后由 寇弘禄 于 2013-3-23 22:30 编辑
  1. public class Test1 {
  2.         public static void main(String[] args) {
  3.                 Test2 test = new Test2();
  4.                 System.out.println(test.returnTest2());
  5.         }
  6. }

  7. class Test2 {
  8.         public int returnTest2(){
  9.                 int a = 10;
  10.                 int c = a++ + ++a*2; //这里是怎么运算的,我觉得结果是32,但是运算结果是34
  11.                 return c;
  12.         }
  13. }
复制代码

作者: xuqangxing    时间: 2013-3-23 15:03
本帖最后由 xuqangxing 于 2013-3-23 15:06 编辑

int  c=a+++++a*2    +和++运算符同优先级  结合方向为“自右到左”(右结合性即相当于c=a+(++(++a*2))
作者: 陈原野    时间: 2013-3-23 15:04
a++和++a属于一元运算,优先级高于二元和三元运算,然后是算术运算按基本规律就行 先乘除后加减!
作者: xuqangxing    时间: 2013-3-23 15:05
打错了  是自右到左
作者: 秦久启    时间: 2013-3-23 16:25
楼上的都是正解,其实没有必要纠缠于谁先运算,开发中不会出现那种状况的!要改变运算顺序,()就可以轻松的解决。你懂的。。。。
作者: 张海洋    时间: 2013-3-23 16:35
++或者--运算符;++在后:是先计算值,后累加 ;++在前:先累加,后计算值;--同理可得;
作者: 壁虎    时间: 2013-3-23 16:54

a++和++a属于一元运算,优先级高于二元和三元运算,然后是算术运算按基本规律就行 先乘除后加减!
还有值得注意++在前和++在后的区别。a++是先返回然后对自身进行加1,++a是先对自身进行加1后返回。
如:
  1. int i=10;
  2. int a=i++;
  3. System.out.println(a+".."+i);//输出:10...11
复制代码
  1. int i=10;
  2. int a=++i;
  3. System.out.println(a+".."+i);//输出11...11
复制代码
我们来一起算一算
  1. int a=10;
  2. int c = a++ + ++a*2;
复制代码
按照优先级,先算++,这里有两个++,既然同级,从左往右开始算。
1. a++ a自身的值变为11了,但是++在后是先返回后再对自身进行加1的,所以就变成了这样:10 +  ++a*2//a的值虽为11了,但是你a++后的返回值还是10
2.++a*2其实就是++11*2,由于++在前所以是先对自身进行加1再返回 于是就变成了这样: 12*2结果为24
3.然后再加上10,最后的结果就是34了。

其实楼主也没必要纠结这个优先级的顺序,实在忘记了优先级的顺序,我们可以人为的通过括号来进行控制。我想楼主应该是不怎么理解++在前和++在后的效果
作者: 魏福伟    时间: 2013-3-23 17:15


查啦下资料++的运算符高于+
int c = (a++) + (++a) * 2;
作者: 寇弘禄    时间: 2013-3-23 22:29
tuo1254 发表于 2013-3-23 16:54
a++和++a属于一元运算,优先级高于二元和三元运算,然后是算术运算按基本规律就行 先乘除后加减!
还有值得注 ...

谢谢,看懂了。。




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