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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨长川 中级黑马   /  2013-1-19 19:52  /  7243 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨长川 于 2013-1-21 11:58 编辑

如题,Java中运算符的优先级是什么的顺序?
比如下面的这个程序:
int x=2;
int y=3;
int x1=7;
int y1=8;
System.out.println(x1+x++);
System.out.println(++y-x);
System.out.println(x1---y);
System.out.println(--y1*y);


输出的结果到底是什么呢??

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
本帖最后由 柴乔军 于 2013-1-19 20:04 编辑

结果如下
  1. 9
  2. 1
  3. 3
  4. 28
复制代码
x1 + x++ 的运行过程是,先运算了x1+x,然后再对x自增,这是x++的运算
++y-x 的运行过程,是先对y自增,然后再进行减法运算,这里为什么得到的是1呢,楼主可能不懂的在这里,因为第一次运算,将x++结束后,x的值变为了3
所以运算出的结果是1,以下的运算是一样的,++ ——是对变量自身运算的

如第三个运算结果,x1—y先进行运算,然后再进行x1--运算,而y经过第二次输出的运算后,y的值为4,所以运算出的结果是3,x1--后变为了6;
最后一个表达式,先计算了--y1,再运算乘法,y的值仍然为4,7*4=28;

如++x+y相当于 (x+1)+y
x+++y,相当于 x+y,x=x+1;

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
int x=2;
  int y=3;
  int x1=7;
  int y1=8;
  System.out.println(x1+x++);
  System.out.println(++y-x);
  System.out.println(x1---y);
  System.out.println(--y1*y);

这几个运算主要看的就是“+”、“-”在前和在后的问题,
   运算符在前时就先运算在使用此值,二运算符在后面则先用值,然后再运算
   例如:int x = 1;
   则--x等于0,x变的值就为0;
   而 x--等于1,x的值为0;
   
   第一行输出:x1 = 7、 x++ = 2;但x经过此次运算后其值变为3;
   第二行输出中y等于3,二 ++y等于4 ,x等于3 ,4 - 3 等于,1;
   第三行输出中x1--等于7, y等于4,所以x1---y等于3;
   第四行输出--y1 等于7,y等于4,所以--y1*y等于28

点评

第一行?  发表于 2013-1-20 13:10

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
  第一行输出:x1 = 7、 x++ = 2;但x经过此次运算后其值变为3;
   第二行输出中y等于3,二 ++y等于4 ,x等于3 ,4 - 3 等于,1;
   第三行输出中x1--等于7, y等于4,所以x1---y等于3;
   第四行输出--y1 等于7,y等于4,所以--y1*y等于28
运算符在前,先进行运算在使用此值,运算符在后先使用此值,再进行运算

点评

怎么跟楼上的一模一样??  发表于 2013-1-20 13:11
回复 使用道具 举报
高浩 发表于 2013-1-20 12:49
第一行输出:x1 = 7、 x++ = 2;但x经过此次运算后其值变为3;
   第二行输出中y等于3,二 ++y等于4 ,x ...

我想的答案就是那样的,
回复 使用道具 举报
其实我不建议你记住优先级 比如你的第一个println(x1+x++);你应该在你先要的算得前面加一个括号 括起来会解决问题的println(x1+(x++))显然就知道怎么算了
回复 使用道具 举报
偏執旳、靑春 发表于 2013-1-20 15:47
其实我不建议你记住优先级 比如你的第一个println(x1+x++);你应该在你先要的算得前面加一个括号 括起来会解 ...

是的,对于专业的程序员,代码编写要避免歧义是很有必要的,熟练使用括号很有必要啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马