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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Aimer_WJY 中级黑马   /  2014-4-4 12:40  /  1024 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

if(++x==y--&x++==1||--y==0)
        System.out.println("x="+x+",y="+y);//x=2,y=0

这里的y输出为什么不是 -1;

5 个回复

倒序浏览
还是老问题啊 , 短路问题
|| 左边true 右边不运行
&& 左边false 右边不运行
回复 使用道具 举报
osully 发表于 2014-4-4 13:01
还是老问题啊 , 短路问题
|| 左边true 右边不运行
&& 左边false 右边不运行

你面试了么?

点评

没有...怎么了  发表于 2014-4-4 13:21
回复 使用道具 举报
本帖最后由 莫若吻 于 2014-4-4 14:15 编辑
  1. class Test{
  2.   public static void main(String[] args){
  3.            int x=2,y=0;
  4.            if(++x==y--&x++==1||--y==0)
  5.                    {
  6.                     System.out.println("条件语句内:x="+x+",y="+y);
  7.                    }
  8.           System.out.println("条件语句外:x="+x+",y="+y);
  9.           }
  10. }
复制代码


运行结果:


针对你的问题,我整理出上面的代码。
首先应明确两点:第一,运算的优先级,第二,if语句满足条件才执行其中的执行语句。
运算的优先级:比较运算符中,== 与 != 的优先级略低。其他比较运算符要先执行。
逻辑运算符 !的优先级最高,而逻辑&&与||的优先级低于比较运算符。
赋值运算符低于其他运算符,先运算后赋值。运算是从左往右运算的。

运算过程分析:
首先判断条件语句:++x==y--&x++==1||--y==0
(x=2,y=0)
1、 ++x==y--   结果为: false
因为中间有个==符号,所以++x 表示先自加再判断, y--表示先判断再自减;
也就是第一步先运算x=x+1  再判断x==y 然后运算y=y-1 即:x=3,3不等于0,结果为 false  然后 y=-1
2、  x++==1    结果为 :  false
运算顺序:先判断x==1   后运算 x=x+1  即:3不等于1 结果为false   x=4
3、  --y==0 结果为:false
运算顺序:先运算y=y-1 后判断y==0  即:y=-2,-2不等于0,结果为false

4. 综上所述, 条件语句 ++x==y--&x++==1||--y==0   变成这样的   false & false ||false  ,  最终结果为false 。

因为条件不满足,所以if语句的执行语句不执行。但是运算却在判断条件语句的时候同时执行了。故运算后,只执行语句外的输出语句:x=4,y=-2。
(此答案仅供参考哦)

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
首先,你这个程序不能得到结果,因为不满足条件,详情见下:
       1):++x==y-- 不满足条件,此时x=3,y=-1。
       2):x++==1 此时x先赋值3,当语句结束后,再加1.
       3):--y==0 y=-2。
如果在if(++x==y-- & x++==1 || --y==0)这句后面加个分号,最后得到的结果为:见图片

有问题,欢迎继续回复。。

.png (102.86 KB, 下载次数: 12)

.png

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马