int x = 1,y = 1;
if(x++ == 2 & ++y == 2){
    x = 7;
}
System.out.println("x=" + x + ",y=" + y);
为什么x = 2,y = 2 ?
大侠们可以给我说下分析过程吗?

解决方案 »

  1.   

    if(x++ == 2 & ++y == 2){
        x = 7;
    }
    1、x先判断,后++,但所以x++ == 2为false,但是&不短路,所以要计算++y,这个是先自增,所以y=2,++y==2为true,但是x++==2 为false,所以整个表达式为false,所以也就不会执行到x=7这部啦
    所以最后输出的就是x = 2,y = 2
    不知道表达明白没
    最近表达能力有点下降
      

  2.   

    谢谢,但是我的分析是x++不是x先参与运算后x再自增为1吗?x最后应该是2呀,++y,是y先自增1然后再参与运算,y也应该是等于2呀?不知道我哪部分析错了
      

  3.   

    你说的没错啊,你看下这句话if(x++ == 2 & ++y == 2)
    x++是x先参与运算后x再自增为1,先参加运算x=1,此时x==2是false,但是&不短路,所以要计算++y,这个是先自增,所以y=2,++y==2为true。整个if的结果是false。最终输出x = 2,y = 2
      

  4.   

    当使用&&作逻辑与的时候,先计算第一个表达式,如果第一个表达式为真,继续计算第二个表达式,如果第一个表达式假,则不计算第二个表达式。
    当使用&作逻辑与的时候,就是LZ这种情况,不管第一个表达式的计算结果是真是假,第二个表达式都会计算。x++ == 2 先==,再++; ++y == 2 先++,再==
      

  5.   

    int x=1;
    x=x++;
    搞懂这个一切都不是问题了
    x会不变,你懂的哟
      

  6.   

    &是逻辑与 操作符号,没有短路原则的。
    &&是条件与判断,有短路原则。
      

  7.   

    1、&与&&不一样
    2、第一个是假,第二个是真,所以整体为假,赋值为7不执行
      

  8.   

    初学者总会被坑过,x++还是++x,x都会加1,只是顺序的问题。
      

  9.   


    int x = 1,y = 1;
    x=x+1;
    if(x == 2 & y == 2){
         x = 7;
    }
    y=y+1
    System.out.println("x=" + x + ",y=" + y);我想问一下lz这段程序的输出是多少?