彻底弄清: 逻辑与(&)、逻辑或(|)、短路与(&&)、短路或(||)、取反(!)、逻辑异或(^)

1.是什么

        在Java中,逻辑运算符用于组合多个布尔表达式,并返回一个布尔结果。


(1)区分逻辑与(&)和短路与(&&)

相同点:判断两个布尔表达式是否都为true。如果两个表达式都为true,则整个表达式的结果为true;否则,结果为false

不同点:短路与(&&)判断,如果第一个表达式为false,则不会评估第二个表达式,因为整个逻辑与表达式的结果已经确定为false


举个例子吧!

①使用短路与(&&)判断

public class Test {
    public static void main(String[] args) {
        int a = 5;
        int b = 8;
        if (a < 1 && ++b > 7){
            System.out.println("ok");
        }
        System.out.println(b);
    }
}

     这里由于第一个表达式是false,所以直接判定整个逻辑为false,b没有自增,输出结果为8。

②使用逻辑与(&)判断

public class Test {
    public static void main(String[] args) {
        int a = 5;
        int b = 8;
        if (a < 1 & ++b > 7){
            System.out.println("ok");
        }
        System.out.println(b);
    }
}

    这里输出的结果是9,使用逻辑与(&)即使第一个操作数为false,也会评估第二个操作数。


(2)区分逻辑或(|)和短路或(||)

相同点:判断两个布尔表达式是否至少有一个为true。如果至少有一个表达式为true,则整个表达式的结果为true;如果两个表达式都为false,则结果为false

不同点:短路或的判断中如果第一个操作数(布尔表达式)评估为true,那么整个逻辑或表达式的结果就已经确定为true,因此不会评估第二个操作数。这种短路行为可以避免不必要的计算,并且可以防止在第二个操作数中可能出现的错误或异常。


举个例子吧!

①使用短路或(||)判断

public class Test {
    public static void main(String[] args) {
        int a = 5;
        int b = 8;
        if (a > 1 || ++b > 10){
            System.out.println("ok");
        }
        System.out.println(b);
    }
}

  由于第一个表达式是true,所以直接判定整个逻辑为true,“||”后面的条件不再执行,b没有自增,输出结果为8。

②使用逻辑或(|)判断

public class Test {
    public static void main(String[] args) {
        int a = 5;
        int b = 8;
        if (a > 1 | ++b > 10){
            System.out.println("ok");
        }
        System.out.println(b);
    }
}

   使用逻辑或(|)即使第一个操作数为true,也会评估第二个操作数,输出结果为9。


(3)取反(!)

        取反操作通常指的是逻辑非(!)运算符,它用于反转布尔表达式的值。如果表达式为true,逻辑非运算符将返回false;如果表达式为false,逻辑非运算符将返回true

下面将通过一个具体的例子来详细解释逻辑非(取反)运算符的使用。

public class Test {
    public static void main(String[] args) {
       boolean a = true;
       System.out.println(!a);
    }
}

结果:false


(4)逻辑异或(^)

        逻辑异或运算符(^)用于对两个布尔值进行运算,其结果是当两个操作数不相同时为true,相同时为false

操作数A操作数 B 结果 (A ^ B)
truetruefalse
truefalsetrue
falsetruetrue
falsefalsefalse

例题①:

public class Example {
    public static void main(String[] args) {
        boolean a = true;
        boolean b = false;

        // 使用逻辑异或运算符
        boolean result = a ^ b; // 结果为 true,因为 a 和 b 不相同

        System.out.println("a ^ b = " + result); // 输出:a ^ b = true

        // 另一个例子
        boolean c = true;
        boolean d = true;

        result = c ^ d; // 结果为 false,因为 c 和 d 相同

        System.out.println("c ^ d = " + result); // 输出:c ^ d = false
    }
}

例题②:

public class Test {
    public static void main(String[] args) {
       System.out.println((4<1)^(6>3));
    }
}

结果:true


发现:

      分析完后,小伙伴们有什么发现呢?在布尔逻辑中,&&是更常用的符号,因为它提供了更高效的评估(短路行为)。而&主要用于位操作,尽管它可以用于布尔逻辑,但通常不推荐这样做,因为它不具备短路特性,同理 || 也是如此!!!


趁热打铁!!!

练习1:

public class Test {
    public static void main(String[] args) {
       int x = 5;
       int y = 5;
       if (x++==6 & ++y==6){
           x=11;
       }
       System.out.println("x="+x+",y="+y);
    }
}

答案:x=6,y=6

解释:

总结:后缀自增的情况是先赋值再判断再自增!!!

练习2:

public class Test {
    public static void main(String[] args) {
       int x = 5;
       int y = 5;
       if (x++==6 && ++y==6){
           x=11;
       }
       System.out.println("x="+x+",y="+y);
    }
}

答案:x=6,y=5

练习3:

public class Test {
    public static void main(String[] args) {
       int x = 5;
       int y = 5;
       if (x++==6 | ++y==6){
           x=11;
       }
       System.out.println("x="+x+",y="+y);
    }
}

答案:x=11,y=6

练习4:

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

答案:a=24

提示:(=)是赋值操作不是等于(==)


        好啦,本期干货就这些啦,小伙伴们还想补充什么就在评论区留言喔!

可能感兴趣的方面:

#你真的能区分i++和++i吗?速速来看...

#强制类型转换你真的了解吗?

#什么是自动类型转换???

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值