在 Java 编程中,逻辑运算符 是实现程序“智能决策”的核心工具。它们用于组合多个条件表达式,模拟数字电路中的 AND、OR、NOT 门 行为,广泛应用于 if、while 等控制结构中。
掌握 Java 中三种逻辑运算符:&&、||、! 的语法与语义
理解 短路求值(Short-Circuit Evaluation) 机制及其优势
能够正确组合多个布尔条件进行复杂判断
避免常见陷阱(如运算符优先级、类型混淆等)
逻辑运算符用于对 布尔表达式 进行操作,返回 true 或 false。Java 提供三种逻辑运算符:
&&)只有当 两个条件同时为 true 时,整个表达式才为 true。
condition1 && condition2int a = 10, b = 20, c = 20;
if ((a < b) && (b == c)) {
System.out.println("Both conditions are true");
}
// 输出: Both conditions are true如果 condition1 为 false,不会执行 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())。
||)只要 任意一个条件为 true,整个表达式就为 true。
condition1 || condition2int 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如果 condition1 为 true,不会执行 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,所以跳过右侧表达式。
!)将布尔值 反转:true → false,false → true。
!(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逻辑运算符的优先级(从高到低):
!(最高)
&&
||(最低)
但为避免歧义,强烈建议使用括号明确逻辑分组:
// 不推荐:依赖优先级
if (a || b && c)
// 推荐:显式分组
if (a || (b && c)) // 先算 b && c
// 或
if ((a || b) && c) // 先算 a || b&&:全真才真,短路(左假则停)
||:一真即真,短路(左真则停)
!:取反,一元运算符
短路机制是性能与安全的关键保障
始终用括号明确复杂逻辑的执行顺序
逻辑运算符是构建健壮、高效条件判断的基石
以下代码输出什么?为什么?
int a = 5;
boolean result = (a > 10) && (a++ < 20);
System.out.println("a = " + a + ", result = " + result);
如何用逻辑运算符实现“三个数中至少有两个相等”的判断?
在什么特殊场景下,你可能会选择使用 & 而不是 &&?请举例说明。