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

逻辑运算符:

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

真值表:

JAVA基础:从一道面试题看逻辑运算符&与&&、|与||的区别_第1张图片

重难点:

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

小练习:

JAVA基础:从一道面试题看逻辑运算符&与&&、|与||的区别_第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=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

变形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);
	}
}

运行结果:

什么也没有输出。

变形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的区别)

你可能感兴趣的:(java)