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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lgqioi 中级黑马   /  2014-4-19 13:03  /  1688 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

    public static void main(String[] args) {

        int x = 4;
        int y = 5;
       if (x++ > 4 & ++y > 5) {  
            x++;
        }

        System.out.println("x=" + x + ",y=" + y);
    }

& : 两边的boolean表达式结果,有一个为false。那么结果就是false。 否则为true。
if语句条件为假,内容不运算
哪为什么是 x=5,y=6 请您解释解释

9 个回复

倒序浏览
因为x++ > 4 & ++y > 5执行了,所以结果就是x=5,y=6。。。。。判断语句里x++的意思是x=x++,此时x是4,执行完if,x才变成5
回复 使用道具 举报
if语句判断x++>4这条语句,先判断x是否大于4,不管结果如何,x都会自增1.所以执行完这条语句的结果是:false,然后x=5.
因为&这个符号和&&这个符号是有区别的,&无论前面是否为false,后面语句也要进行判断;而&&如果前面为false,后面的语句就不再判断,直接返回false。
因为你用的&这个符号,虽然前面判断结果为false,但是后面的语句仍会判断执行,所以y的值就变成了6.
因此你的打印结果就是:x=5,y=6

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
简单的说,你的这些代码除了if语句里的x++没有运算,其他的都运算了
回复 使用道具 举报
当是&&双与时,左边如果为假,则不进行右边的运算。而双与是两边都进行运算。
双与代码如下:
  1. package exercise;

  2. public class Test5 {

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

  4.                 int x = 4;
  5.                 int y = 5;
  6.                if (x++ > 4 && ++y > 5) {  
  7.                     x++;
  8.                 }
  9.                 System.out.println("x=" + x + ",y=" + y);
  10.             }
  11. }
复制代码
回复 使用道具 举报
理解一下短路运算符和非短路运算符的区别:
短路运算符: &&  ||
非短路运算符: &    |
和运算时:运算符两边都为真时结果才为真,否则为假,短路运算符 && 在左边运算符为假时就不再运算右边的直接返回假,&则两边都会运算;
或运算时:运算符两边都为假时结果才为假,否则为真,短路运算符 || 在左边运算符为真时就不再运算右边的直接返回真,| 则两边都会运算;

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
原因就是这句
if (x++ > 4 & ++y > 5) {  
            x++;
        }   
  if语句条件为假,内容不运算  但是(x++ > 4 & ++y > 5 ) 这句执行了   所以x=5,y=6
回复 使用道具 举报
   public static void main(String[] args) {

        int x = 4;
        int y = 5;
       if (x++ > 4 & ++y > 5) {  
            x++;
        }
        System.out.println("x=" + x + ",y=" + y);
    }
这里的x++>4,因为是后++,所以先用x与4相比较,结果为false,然后x再自增1,x值就为5,
后面的 ++y > 5,因为++y是前++,所以这里y要先自增1,y值就为6,然后再与5比较,结果为true

  这里你要注意一下&和&&的区别,&是不会短路的就算x++>4结果为false,后面的++y > 5还是要执行的
要是这里是&&,就不用执行了,所以x=5,y=6

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
public static void main(String[] args) {

         int x = 4;
         int y = 5;
         if (x++ > 4 & ++y > 5) {  //&运算符是不论左边是否为正,右边都要执行。
                                                  //x是先赋值再自加4>4为false,自加后x=5,右边先自己再赋值6>5,
                                                 //自加后y=6,if里面为false,不执行
                                                 //if语句块儿,所以最后输出还是5、6
             x++;
         }
         System.out.println("x=" + x + ",y=" + y);
     }
回复 使用道具 举报
因为 x++ >4  加号在后面,所以先用x跟4比较然后在++ 结果为false但此时x的值已经变成5了,&单与是不过前面是否正确,后面都要继续判断,++y>5   加号在前面,所以先加1 y的结果为6然后跟5比较 。所以
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马