源本科技 | 码上会

Java 逻辑运算符

2025/12/25
22
0

在 Java 编程中,逻辑运算符 是实现程序“智能决策”的核心工具。它们用于组合多个条件表达式,模拟数字电路中的 AND、OR、NOT 门 行为,广泛应用于 ifwhile 等控制结构中。


学习目标

  • 掌握 Java 中三种逻辑运算符:&&||! 的语法与语义

  • 理解 短路求值(Short-Circuit Evaluation) 机制及其优势

  • 能够正确组合多个布尔条件进行复杂判断

  • 避免常见陷阱(如运算符优先级、类型混淆等)


什么是逻辑运算符?

逻辑运算符用于对 布尔表达式 进行操作,返回 truefalse。Java 提供三种逻辑运算符:


1. 逻辑与(&&

只有当 两个条件同时为 true 时,整个表达式才为 true

condition1 && condition2
int a = 10, b = 20, c = 20;
if ((a < b) && (b == c)) {
    System.out.println("Both conditions are true");
}
// 输出: Both conditions are true

如果 condition1false不会执行 condition2,直接返回 false

int a = 10, b = 20, c = 15;
System.out.println("b 初始值: " + b); // 20

if ((a > c) && (++b > c)) {
    // 不会进入此块
}
System.out.println("b 最终值: " + b); // 仍为 20!++b 未执行

💡 优势:避免无效计算,防止空指针异常(如 obj != null && obj.isValid())。


2. 逻辑或(||

只要 任意一个条件为 true,整个表达式就为 true

condition1 || condition2
int a = 10, b = 1, c = 10, d = 30;
if (a > b || c == d) {
    System.out.println("One or both conditions are true");
}
// 输出: One or both conditions are true

如果 condition1true不会执行 condition2

int a = 10, b = 20, c = 15;
System.out.println("b 初始值: " + b); // 20

if ((a < c) || (++b < c)) {
    System.out.println("Inside if");
}
System.out.println("b 最终值: " + b); // 仍为 20!++b 未执行

✅ 因为 a < c(10 < 15)为 true,所以跳过右侧表达式。


3. 逻辑非(!

将布尔值 反转truefalsefalsetrue

!(condition)
int a = 10, b = 1;
System.out.println("!(a < b) = " + !(a < b)); // !(false) → true
System.out.println("!(a > b) = " + !(a > b)); // !(true)  → false
!(a < b) = true
!(a > b) = false

与布尔变量直接使用

逻辑运算符天然适配 boolean 类型:

public class LogicalDemo {
    public static void main(String[] args) {
        boolean a = true;
        boolean b = false;
        
        System.out.println("a && b: " + (a && b)); // false
        System.out.println("a || b: " + (a || b)); // true
        System.out.println("!a: " + !a);           // false
        System.out.println("!b: " + !b);           // true
    }
}
a && b: false
a || b: true
!a: false
!b: true

运算符优先级与括号使用

逻辑运算符的优先级(从高到低):

  1. !(最高)

  2. &&

  3. ||(最低)

但为避免歧义,强烈建议使用括号明确逻辑分组

// 不推荐:依赖优先级
if (a || b && c)

// 推荐:显式分组
if (a || (b && c))   // 先算 b && c
// 或
if ((a || b) && c)   // 先算 a || b

重点总结

  • &&:全真才真,短路(左假则停)

  • ||:一真即真,短路(左真则停)

  • !:取反,一元运算符

  • 短路机制是性能与安全的关键保障

  • 始终用括号明确复杂逻辑的执行顺序

  • 逻辑运算符是构建健壮、高效条件判断的基石


思考题

  1. 以下代码输出什么?为什么?

    int a = 5;
    boolean result = (a > 10) && (a++ < 20);
    System.out.println("a = " + a + ", result = " + result);
    
  2. 如何用逻辑运算符实现“三个数中至少有两个相等”的判断?

  3. 在什么特殊场景下,你可能会选择使用 & 而不是 &&?请举例说明。