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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 垂天云 高级黑马   /  2013-8-27 15:46  /  1542 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 2013-8-27 22:09 编辑
  1. 写出输出的结果.
  2. class Demo
  3. {
  4. public static void main(String[] args)
  5. {
  6. int x=0,y=1;
  7. if(++x==y--&x++==1||--y==0)
  8. System.out.println("x="+x+",y="+y);
  9. else
  10. System.out.println("y="+y+",x="+x);
  11. }
  12. }
复制代码
谁能帮我详细说明一下if(++x==y--&x++==1||--y==0),这里面的判断顺序,和其中x和y的数值变化····

评分

参与人数 1技术分 +1 收起 理由
张智文 + 1

查看全部评分

7 个回复

倒序浏览
优先级由高到低:
算术运算符
比较运算符
逻辑运算符:&& ,|| ,!
赋值运算符:= ,+=
其它运算符: n++ n--随便把刚才做测试的两个小练习给你列出来你看一下\
练习 1
int b = 1;
if(3+4*2>10&& flag=true)  打印结果为true

练习 2
                int b = 5;
                b += b--; // 5+5
                System.out.println(b);
                b = 5;
                b += --b; // 5+4
                System.out.println(b);

                b = 5;
                b += ++b;// 5+6
                System.out.println(b);
                b = 5;
                b += b++; // 5+5
                System.out.println(b);

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 yinbolove576 于 2013-8-27 16:28 编辑
  1. class Test40
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x=0,y=1;
  6.                 if(++x==y-- & x++==1 || --y==0)
  7.                         System.out.println("x="+x+",y="+y);//楼主这里的分号打错了
  8.                 else
  9.                         System.out.println("y="+y+",x="+x);
  10.         }
  11. }

  12. /*
  13. 解析:
  14. 从式子中可以看出,由于是单与和双或,因此执行顺序是从左往右的,然后
  15. 1. ++x -->x先自增,然后进行运算,即x=1;而y--则是先进行运算后再进行自减,
  16. 即1 == 1--        --> true,x值为1,y值为0;

  17. 2.由于是单与&符号,因此就要两边表达式都要进行判断,所以去执行 x++ ==1,
  18. x在值为1的前提下,所得1 == 1        -->true ,x再自增为2

  19. 3.由于是双或||符号,其规则就是只要左边为true右边则不进行运算,因此
  20. 通过分析得知if语句中的表达式为true,则执行作用域中的语句,即x=2,y=0
  21. */
复制代码
建议楼主多看看老毕的视频,老毕讲得很透彻的呢~~~

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1 赞一个!

查看全部评分

回复 使用道具 举报
这个很简单嘛,先判断||左边的部分,这时首先判断&左边的部分,++x==y--,即先进行++x,用自加后的x与y比较,然后y--,结果是x=1,y=0,&左边的部分为true,再判断&右边的部分x++==1,结果是x=2,&右边的部分true。这时||左边部分为true,根据短路规则,整个表达式为true,不用判断||右边了,所以最终结果为x=2,y=0

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
yinbolove576 发表于 2013-8-27 16:26
建议楼主多看看老毕的视频,老毕讲得很透彻的呢~~~

请问一下这里的  这个& 运算符和&&运算符有什么区别呢   
回复 使用道具 举报
白磊 发表于 2013-8-27 16:49
请问一下这里的  这个& 运算符和&&运算符有什么区别呢

&和&&特点:
&:无论boolean表达式左边是true还是false,右边都运算。
&&:当boolean表达式左边为false时,右边不运算,可以发现&&在运算时效率稍高于&。

回复 使用道具 举报
先把表达示转换得可读性强一点:
int x=0,y=1;
if((++x==y--) & (x++==1) || (--y==0))
楼主你看这是不是不那么头疼了?前辍++是先运算后比较,后辍是先比较后运算。
所以:
(++x==y--)=>true;
(x++==1)=>true;
(--y==0)=>false;
结果是
x=2,y=-1

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王广亚 于 2013-8-27 21:40 编辑

给你一个表
运算符的优先级和结合性
优先级        描述                                                              运算符示例                 结合性
1             分隔符                                                              []  ()  .  ,   ;                  右到左
2           对象归类,自增自减运算,逻辑非                  instanceof  ++  --            左到右
3          算术乘法运算                                                      *   /   %                      左到右
4          算术加减运算                                                        +   -                           左到右
5          移位运算                                                     >>   <<   >>>                    左到右
6          大小关系运算                                               <   <=   >=    >                左到右
7          相等关系运算                                                        ==   !=                     左到右
8          按位与运算                                                            &                             左到右
9         按位与或运算                                                        ^                               左到右
10        按位或                                                                 |                                 左到右
11        逻辑与运算                                                         &&                                左到右
12        逻辑或运算                                                         ||                              左到右
13        三目条件运算                                                    ? :                             左到右
14        赋值运算                                                             =                                右到左

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

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