为什么输出的x 是7,y 是2?

    int x = 1,y = 1;
    if(x++==1 | ++y==1) 
     {
        x =7;
     }
    System.out.println("x="+x+",y="+y);

为什么输出的x 是7,y 是2?

阅读 3.7k
5 个回答

++在 x 的后面,所以 x 先与 1 进行比较,是true,则执行 x = 7; ++在 y 的前面,所以 y 自增 1 变为 2

单竖线|操作,是将各个操作数转换成二进制,然后各位相或操作的结果

4|4 100|100 100和100 各位相或操作100 4
5|4 101|100 100和100 各位相或操作101 5
8|4 1000|100 1000和0100 各位相或操作1100 12

那么问题中的x++==1 | ++y==1操作的结果就是0|1 结果就是1 就是true,所以x=7。y=2就不用解释了吧

首先要清楚:“||”具有短路功能,但是“|”没有短路功能

所以就很简单了,在判断条件中“x++==1”:先比较后自增,所以返回true,x=2。

因为不会短路,所以依然会判断条件“++y==1”:先自增后比较,y=2,返回false。

进入if中的代码块,x被赋值为7。

所以结果:x=2,y=7

int x = 1,y = 1;
if(x++==1 | ++y==1) 
//x++==1先比较x==1(x此时为1,为true),再x=x+1(x=2)
//‘|’运算中,2边都会计算;“||”运算中,当左边为true时不计算右边
//++y==1先进行y=y+1(y=2),再进行y==1(y此时为2,false)
 {
 //在‘|’运算中,只要1边为true,就会向下执行,所以执行x=7
    x =7;
 }
System.out.println("x="+x+",y="+y);

++a 是进行自加,a++是先进行表达式的运算

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题