java中常见逻辑运算 【与& 或| 非! 异或^】

在这里插入图片描述

逻辑运算符的深入理解与案例分析

在 Java 开发中,逻辑运算符是常见且非常重要的运算符之一。本文将详细讲解几种常用的逻辑运算符及其区别,结合示例代码和输出结果,帮助读者更好地理解和应用这些运算符。


一、常见逻辑运算符

1. a & b:逻辑与 (&)
  • 规则:当 ab 同时为 true 时,结果为 true,否则为 false
2. a && b:短路与 (&&)
  • 规则:当 ab 同时为 true 时,结果为 true,否则为 false
3. a | b:逻辑或 (|)
  • 规则:当 ab 有一个为 true 时,结果为 true,否则为 false
4. a || b:短路或 (||)
  • 规则:当 ab 有一个为 true 时,结果为 true,否则为 false
5. !a:取反 (!)
  • 规则:当 atrue 时,结果为 false;当 afalse 时,结果为 true
6. a ^ b:逻辑异或 (^)
  • 规则:当 ab 不相同时,结果为 true,否则为 false

二、逻辑与与短路与的区别

&&& 都表示"与"操作,但二者有本质区别:

  • & (逻辑与):无论第一个条件是否为 false,都将判断第二个条件,效率较低。
  • && (短路与):如果第一个条件为 false,则不会判断第二个条件,效率较高。
示例代码
public class LogicOperator01 {
    public static void main (String[] args) {
        int age = 50;

        // 短路与的使用
        if(age > 20 && age < 90) {
            System.out.println("ok100");
        }

        // 逻辑与的使用
        if(age > 20 & age < 90) {
            System.out.println("ok200");
        }

        // 区别示例
        int a = 4;
        int b = 9;

        // 短路与示例
        if(a < 1 && ++b < 50) {
            System.out.println("ok300");
        }
        System.out.println("a = " + a + " b = " + b);  // 输出: a = 4, b = 9

        // 逻辑与示例
        if(a < 1 & ++b < 50) {
            System.out.println("ok400");
        }
        System.out.println("a = " + a + " b = " + b);  // 输出: a = 4, b = 10
    }    
}
输出结果
ok100
ok200
a = 4 b = 9
a = 4 b = 10
解释
  • 在短路与 (&&) 中,如果 a < 1false,后面的 ++b < 50 不会被执行,因此 b 的值保持为 9
  • 在逻辑与 (&) 中,即使 a < 1false++b < 50 仍会被执行,因此 b 的值增加为 10

三、逻辑或与短路或的区别

||| 都表示"或"操作,但二者也存在区别:

  • | (逻辑或):无论第一个条件是否为 true,都将判断第二个条件。
  • || (短路或):如果第一个条件为 true,则不会判断第二个条件。
示例代码
public class LogicOperator02 {
    public static void main (String[] args) {
        int age = 50;

        // 短路或的使用
        if(age > 20 || age < 90) {
            System.out.println("ok100");
        }

        // 逻辑或的使用
        if(age > 20 | age < 90) {
            System.out.println("ok200");
        }

        // 区别示例
        int a = 4;
        int b = 9;

        // 短路或示例
        if(a < 1 || ++b < 50) {
            System.out.println("ok400");
        }
        System.out.println("a = " + a + " b = " + b);  // 输出: a = 4, b = 9
    }
}
输出结果
ok100
ok200
a = 4 b = 9
解释
  • 在短路或 (||) 中,如果 a < 1false++b < 50 被跳过,因此 b 的值保持为 9
  • 在逻辑或 (|) 中,即使第一个条件满足,第二个条件仍会被执行,因此如果有修改操作,值会变化。

四、!^ 的案例演示

示例代码
public class InverseOperator {
    public static void main(String[] args) {
        // ! 操作是取反, T -> F, F -> T
        System.out.println(60 > 20); // 输出: true
        System.out.println(!(60 > 20)); // 输出: false

        // ^ 逻辑异或, 当 a 和 b 不同时, 则结果为 true,否则为 false
        boolean b = (10 > 1) ^ (3 < 5);
        System.out.println("b=" + b); // 输出: b=false
    }
}
输出结果
true
false
b=false
解释
  • ! 是取反操作符,将布尔值取反,true 变为 falsefalse 变为 true
  • ^ 是逻辑异或操作符,当两个布尔值不相同时,结果为 true,否则为 false。在本例中,(10 > 1)(3 < 5) 都为 true,因此结果为 false

五、综合练习

示例代码
public class LogicalOperators {
    public static void main(String[] args) {
        // 定义变量
        boolean x = true;
        boolean y = false;
        short z = 46;

        // 第一个 if 语句
        if ((z++ == 46) && (y = true)) z++; 

        // 第二个 if 语句
        if ((x = false) || (++z == 49)) z++;

        // 输出最终结果
        System.out.println("z = " + z); // 输出: z = 50
    }
}
程序运行结果
z = 50
详细解释
  1. 初始变量值

    • x = true
    • y = false
    • z = 46
  2. 第一个 if 语句

    if ((z++ == 46) && (y = true)) z++;
    
    • z++ == 46:在这步中,z 的值为 46,然后 z 自增至 47,但比较操作发生在自增前,因此 z++ == 46true
    • (y = true):这是一个赋值操作,y 被赋值为 true,并且返回 true
    • 因为 && 两边都为 true,所以 z++ 再次执行,z 变为 48
  3. 第二个 if 语句

    if ((x = false) || (++z == 49)) z++;
    
    • x = false:这是一个赋值操作,x 被赋值为 false
    • ++z == 49z 自增为 49,然后进行比较,该表达式为 true
    • 因为 || 只需要一边为 true 即可,所以整个表达式为 truez++ 再次执行,z 变为 50
  4. 最终输出

    • System.out.println("z = " + z); 输出 z = 50
总结

这段代码使用了逻辑运算符 `

&&||,以及自增运算符 ++来修改变量z的值。通过逐步分析每个操作的执行顺序,可以得出最终的结果z = 50`。


六、总结

逻辑运算符在 Java 中是非常基础但也非常重要的工具,通过理解它们的规则和差异,可以在编程中写出更高效、正确的代码。掌握逻辑与、短路与、逻辑或、短路或、取反和异或等运算符的使用,将极大地提高代码的可读性和性能。希望本文的讲解和示例能帮助你更好地理解这些运算符的使用。
在这里插入图片描述

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yhame.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值