黑马程序员技术交流社区

标题: 关于运算符的问题 [打印本页]

作者: kongling    时间: 2013-12-4 23:14
标题: 关于运算符的问题
本帖最后由 kongling 于 2013-12-5 17:45 编辑

int a=1;
a+=2+ ++a;
此时a的值是多少?请分析原因?
作者: HAnG    时间: 2013-12-4 23:38
a=5
其中 ++a 运算一次,自增一次

作者: sd110572    时间: 2013-12-4 23:39
本帖最后由 sd110572 于 2013-12-4 23:44 编辑

优先级
1() [] . 从左到右
2! +(正) -(负) ~ ++ -- 从右向左
3* / % 从左向右
4+(加) -(减) 从左向右
5<< >> >>> 从左向右
6< <= > >= instanceof 从左向右
7== != 从左向右
8&(按位与) 从左向右
9^ 从左向右
10| 从左向右
11&& 从左向右
12|| 从左向右
13?: 从右向左
14= += -= *= /= %= &= |= ^= ~= <<= >>= >>>= 从右向左

按照优先级别,结果是5。
作者: 25343215    时间: 2013-12-4 23:45
等于5,分析见代码。
  1. public class Test {

  2.         public static void main(String[] args) {

  3.                 int a = 1;
  4.                 a += 2 + ++a;
  5.                 sop(a);//运行结果5
  6.                
  7.                 a=1;//还原初始值1
  8.                
  9.                 //开始分解完成个步骤
  10.                
  11.                 //++a  先自增+1,最后等于2
  12.                 a = 2 + ++a;// 2+2=4
  13.                 a = a + 1; // 4+1=5

  14.                 sop(a);//得出结果

  15.         }
  16.         public static void sop(Object obj) {
  17.                 System.out.println(obj);
  18.         }
  19. }
复制代码

作者: 汪洋大海    时间: 2013-12-4 23:52
滔哥常说:不要故意刷帖,否则扣你5分。
作者: ily521125    时间: 2013-12-4 23:58
本帖最后由 ily521125 于 2013-12-5 00:01 编辑

int a=1;
a+=2+ ++a;

此时a的值为6;
分析:从右往左计算:先算++a,此时++a的值为2,a的值为2;
                              再算2+++a,由于++a的值为2,所以2+(++a)结果为4;
                              最后算a+=2+++a,等价于a=a+(2+++a),即a=a+4,由于第一步得出a的值为2,所以最后的a=2+4,即a=6





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