目录
5.逻辑运算符
(学完之后要求能够使用逻辑运算符完成逻辑运算)
5.1逻辑运算符概述
在数学中,一个数据x,大于3,小于6,我们可以写为这样来表示:3<x<6
在Java中,需要把上面的狮子先进行拆解,在进行合并表达。
拆解为:x>3.x<6
合并为:x>3 && x<6
我们可以这样说,逻辑运算符,是用来连接关系表达式的运算符。
当然逻辑运算符也可以直接连接布尔类型的常量或者变量。
逻辑运算符分类:
5.2短路逻辑运算符
注意事项:
逻辑与&:无论左边真假,右边都要执行。
短路与&&:如果左边为真,右边执行;如果左边为假,右边不执行。
逻辑或|:无论左边真假,右边都要执行。
短路或||:如果左边为真,右边执行;如果左边为假,右边不执行。
最常用的逻辑运算符:&&,||,!
代码演示:
/*
逻辑运算符
*/
public class OperatorDemo7 {
public static void main(String[] args) {
//定义变量
int i = 10;
int j = 20;
int k = 30;
//&逻辑与 有false则false演示
System.out.println( (i > j) & (i > k) );//false & false得false
System.out.println( (i > j) & (i < k) );//false & true得false
System.out.println( (i < j) & (i < k) );//true & true得true
System.out.println( (i < j) & (i > k) );//true & false得false
System.out.println( (i == j) & (i == k) );//false & false得false
System.out.println( (i != j) & (i != k) );//true & true得true
System.out.println( (i >= j) & (i >= k) );//false & false得false
System.out.println( (i <= j) & (i <= k) );//true & true得true
System.out.println("--------------------");
//|逻辑或 有true则true演示
System.out.println( (i > j) | (i > k) );//false | false得false
System.out.println( (i > j) | (i < k) );//false | true得true
System.out.println( (i < j) | (i < k) );//true | true得true
System.out.println( (i < j) | (i > k) );//true | false得true
System.out.println( (i == j) | (i == k) );//false | false得false
System.out.println( (i != j) | (i != k) );//true | true得true
System.out.println( (i >= j) | (i >= k) );//false | false得false
System.out.println( (i <= j) | (i <= k) );//true | true得true
System.out.println("--------------------");
//^逻辑异或 相同则为false,不同为ture
System.out.println( (i > j) ^ (i > k) );//false ^ false得false
System.out.println( (i > j) ^ (i < k) );//false ^ true得true
System.out.println( (i < j) ^ (i < k) );//true ^ true得false
System.out.println( (i < j) ^ (i > k) );//true ^ false得true
System.out.println( (i == j) ^ (i == k) );//false ^ false得false
System.out.println( (i != j) ^ (i != k) );//true ^ true得false
System.out.println( (i >= j) ^ (i >= k) );//false ^ false得false
System.out.println( (i <= j) ^ (i <= k) );//true ^ true得false
System.out.println("--------------------");
//!逻辑非 !false为true,!!false为false,!!!false为true,以此类推
System.out.println( !(i > j) );//得true
System.out.println( !!(i > j) );//得false
System.out.println( !!!(i > j) );//得true
System.out.println( !!!!(i == j) );//得false
System.out.println("--------------------");
//&&短路与 结论与&逻辑与相同 有false则false,否则为true
System.out.println( (i > j) && (i > k) );//false & false得false
System.out.println( (i > j) && (i < k) );//false & true得false
System.out.println( (i < j) && (i < k) );//true & true得true
System.out.println( (i < j) && (i > k) );//true & false得false
System.out.println( (i == j) && (i == k) );//false & false得false
System.out.println( (i != j) && (i != k) );//true & true得true
System.out.println( (i >= j) && (i >= k) );//false & false得false
System.out.println( (i <= j) && (i <= k) );//true & true得true
System.out.println("--------------------");
//||短路或 结论与|逻辑或相同,有true则true,否则为false
System.out.println( (i > j) || (i > k) );//false || false得false
System.out.println( (i > j) || (i < k) );//false || true得true
System.out.println( (i < j) || (i < k) );//true || true得true
System.out.println( (i < j) || (i > k) );//true || false得true
System.out.println( (i == j) || (i == k) );//false || false得false
System.out.println( (i != j) || (i != k) );//true || true得true
System.out.println( (i >= j) || (i >= k) );//false || false得false
System.out.println( (i <= j) || (i <= k) );//true | |true得true
System.out.println("--------------------");
//逻辑与&和短路与&&的区别演示
//System.out.println( (i++ > 100) & (j++ > 100) );//false & false得false
System.out.println( (i++ > 100) && (j++ > 100) );//false && false得false 无区别
/*
但是把上面逻辑与的注释掉就得到i == 11;j == 20
为什么呢?因为上面输出语句先运算i++再判断是否大于100,
根据逻辑与的运算,第一条判断出来是false后再继续运算j++在判断是否大于100,
在得到第二条false,则判定为false
但是短路与是先判断第一条i++是否大于100,如果false,
那就直接根据短路与的结论直接不用验证后面的关系表达式直接判断为false
因为逻辑与的结论是有false则全false
所以短路与只要判断出第一个false就不再对后面的关系表达式进行运算直接判定为false
就是为什么叫短路与&&,短路或也同理。
*/
System.out.println("i:" + i);//得11
System.out.println("j:" + j);//得20
}
}