逻辑运算符:
&:逻辑与 | | :逻辑或 | !:逻辑非 |
&& :短路与 | ||:短路或 | ^ :逻辑异或 |
真值表:
重难点:
- 逻辑运算符用于连接布尔型表达式,在 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
变形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的区别)