JAVA基础:从一道面试题看逻辑运算符&与&&、|与||的区别

逻辑运算符:

&:逻辑与 | :逻辑或 !:逻辑非
&& :短路与 ||:短路或 ^ :逻辑异或

真值表:

在这里插入图片描述

重难点:

  • 逻辑运算符用于连接布尔型表达式,在 Java 中不可以写成 3<x<6,应该写 成x>3 & x<6 。
  • “&” 和“ &&” 的区别
    ->&时,左边无论真假,右边都进行运算;
    ->&&时,如果左边为真,右边参与运算 ;如果左边为假,那么右边不参与运算。这就是短路的意思。
  • “|” 和“ ||” 的区别同理, || 表示:当左边为真,右边不参与运算 。
  • 异或 ( ^ )与或 ( | )的不同之处是:当左右都为 true 时,结果为 false 。

小练习:

在这里插入图片描述

面试题:

public class Test {
    public static void main (String []    args){  
        boolean x = true;
        boolean y = false;  
        short z = 42;
        if(y == true)  
        if((z++ == 42)&&(y = true))z++;  
        if((x = false) || (++z == 45)) z++;
        System. out.println("z=" + z);
    }
}

运行结果:
z=43

变形1:

public class Test {
    public static void main (String []    args){  
        boolean x = true;
        boolean y = false;  
        short z = 42;
        //if(y == true)  
        if((z++ == 42)&&(y = true))z++;  
        if((x = false) || (++z == 45)) z++;
        System. out.println("z=" + z);
    }
}

运行结果:
z=46
在这里插入图片描述

解析:

  1. z++ == 42;先取值再运算,42 == 42,表达式值为真,再运算后z是43;&&右边要参与运算;
  2. y = true;注意这里是赋值号,y赋值为真,则(z++ == 42)&&(y = true)为真,执行z++,z是44了;
  3. x = false,同样注意这里是赋值号,x赋值为假,||右边要参与运算;
  4. ++z == 45;先运算再取值,运算后z是45,45 == 45,表达式为真;则(x = false) || (++z == 45)值为真,执行z++;z是46了。

变形2:

public class Test {
    public static void main (String []    args){  
        boolean x = true;
        boolean y = false;  
        short z = 42;
        if(y == true)  
        if((z++ == 42)&&(y = true))z++;  
        //if((x = false) || (++z == 45)) z++;
        System. out.println("z=" + z);
    }
}

运行结果:
z=42

变形3:

public class Test {
    public static void main (String []    args){  
        boolean x = true;
        boolean y = false;  
        short z = 42;
        if(y == true)  
        //if((z++ == 42)&&(y = true))z++;  
        if((x = false) || (++z == 45)) z++;
        System. out.println("z=" + z);
    }
}

运行结果:
z=42

关键点:注意赋值(=)和等号(==)的不同。

前缀和后缀的区别见:JAVA中自增自减运算符(i++与++i的区别)

在这里插入图片描述

 

posted @ 2021-02-08 12:28  BugMiaowu2021  阅读(364)  评论(0)    收藏  举报