Java逻辑运算符用于组合或反转布尔表达式,结果为boolean类型;&&(逻辑与)双真为真且短路,||(逻辑或)一真为真且短路,!(逻辑非)取反;优先级为! > && > ||,推荐用括号明确意图。

Java中的逻辑运算符是用来组合或反转布尔表达式的工具,结果始终是 boolean 类型(true 或 false)。它们不直接操作数字或字符串,而是处理“条件是否成立”这类判断,是 if、while、for 等控制结构的核心支撑。
逻辑与(&&):两个都真才为真
表示“并且”的关系。只有左右两个操作数都为 true,整个表达式才返回 true;只要有一个为 false,结果就是 false。
关键特性是短路求值:如果左边表达式已经为 false,右边根本不会执行。这不仅能提升效率,还能避免潜在错误。
- int a = 0, b = 5;
- if (a != 0 && b / a > 1) { ... } → 不会报除零异常,因为 a != 0 为 false,右边被跳过
逻辑或(||):一个为真就为真
表示“或者”的关系。只要左右任意一个操作数为 true,整个表达式就返回 true;仅当两者都为 false 时,结果才是 false。
立即学习“Java免费学习笔记(深入)”;
同样具备短路求值:一旦左边为 true,右边不再计算。
- String s = null;
- if (s != null || s.length() > 0) { ... } → 安全,s != null 为 false,但右边仍会执行?错!这里实际会空指针。正确写法应是 s != null && s.length() > 0 —— 这正说明理解短路有多重要
- 更典型安全用法:if (user.isAdmin() || user.hasPermission("edit")),管理员身份满足即跳过权限检查
逻辑非(!):把真假反过来
一元运算符,只作用于一个布尔表达式,效果是取反:true 变 false,false 变 true。
- boolean isActive = false;
- if (!isActive) { System.out.println("已停用"); }
- 常用于简化否定条件,比如 !list.isEmpty() 比 list.size() > 0 更清晰直观
- 注意优先级:!比&& 和 || 都高,所以 !a && b 等价于 (!a) && b,无需额外括号
优先级与组合使用技巧
三个运算符的默认优先级从高到低是:! > && > ||。混合使用时,建议用括号明确意图,避免歧义。
- if (age >= 18 && hasID || isStaff) → 实际等价于 (age >= 18 && hasID) || isStaff,但可读性差
- 推荐写成:if ((age >= 18 && hasID) || isStaff),一目了然
- 多个条件并列用 && 时,把计算快、易为 false 的放前面(利用短路);用 || 时,把易为 true 的放前面










