黑马程序员技术交流社区

标题: java关于++ 的运算。 [打印本页]

作者: huangjunhui    时间: 2015-10-26 22:03
标题: java关于++ 的运算。
  1. int x = 1,y = 1;
  2. if(x++==2 & ++y==2)
  3. {
  4.         x =7;
  5. }
  6. System.out.println("x="+x+",y="+y);  
复制代码
解题步骤:(++,--运算符的优先级比==要高,所以先算++或--)
       第一:上面if语句中的条件(x++==2)是将x++表达式的值和2进行比较,而不是将x和2比较
       第二:上面if语句中的条件(++y==2)是将++y表达式的值和2进行比较,而不是将y和2比较
       第三:&是不管左侧的表达式的结果为true还是false,右侧的表达式都要运算
      
       先看x++==2:
       第一步:是将(x++)表达式的值和2进行比较,判断是否等于2,但是由于++符号在x的后面,所以先使用x的值(此时为1)作为(x++)表达式的值
      第二步:执行++运算,相当于x=x+1,此时x的值为2,但是不管x的结果是多少,都不会影响第一步中已经计算出来的(x++)表达式的值,(x++)表达式的值还是1
       第三步:将第一步(x++)表达式的值(1)和2进行==运算,很显然1==2为false,但是此时x的值由于第二步的操作已经变为了2
       因为用的是&,所以右侧的表达式(++y==2)始终要运算
      
       所以再看++y==2
       第一步:是将(++y)表达式的值和2进行比较,判断是否等于2,但是由于++符号在y的前面,所以y要先进行自增的运算,y变为2,再将自增后的y的值(2)作为(++y)表达式的值
       第二步:将第一步(++y)表达式的值(2)和2进行==运算,很显然2==2为true,但是此时y的值由于第一步的操作已经变为了2
      
       由于(x++==2)的结果为false,所以不管(++y==2)是什么,(x++==2 & ++y==2)为false,x=7的赋值运算不执行
       有上面的分析可以得出:x=2,y=2


作者: 我若为神    时间: 2015-10-26 22:12
66666666666666
作者: dushine2000    时间: 2015-10-26 22:29
黑马 实力派 学习的好地方
作者: 指西针    时间: 2015-10-26 22:31
一句话概括后++,a++表示,a++附近的a是原值,再次用到的a已经完成了自增
作者: 没有什么阻挡    时间: 2015-10-26 22:55
int a=5
a=a++;
a=a++;
a=a++;
a=a++;
a=5
作者: 玩★闹    时间: 2015-10-26 23:01
学习,学习,努力努力




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