上一篇
在Java中,使用逻辑运算符:
&&表示与(全真为真),
||表示或(一真即真),
!表示非(取反布尔值),主要用于条件判断和布尔逻辑运算。
在Java编程中,逻辑运算符与(AND)、或(OR)、非(NOT)是控制程序流程的核心工具,用于组合或反转布尔表达式(true/false),下面通过代码示例和原理分析详细说明其用法。
基础逻辑运算符
逻辑非(NOT)
- 作用:取反布尔值。
- 规则:
!true = false,!false = true。boolean isRaining = true; boolean canPlayOutside = !isRaining; // canPlayOutside = false
逻辑与(AND)& 和 &&
&(非短路与):两侧表达式都执行,必须同时为true才返回true。boolean a = (10 > 5) & (3 < 4); // true & true → true
&&(短路与):若左侧为false,跳过右侧计算(高效)。boolean b = (1 > 2) && (10 / 0 == 0); // 左侧false,右侧不执行(避免除零错误)
逻辑或(OR) 和
- (非短路或):两侧表达式都执行,任意一侧为
true即返回true。boolean c = (5 == 5) | (0 > 1); // true | false → true
- (短路或):若左侧为
true,跳过右侧计算。boolean d = (3 <= 3) || (10 % 0 == 0); // 左侧true,右侧不执行
短路与非短路的区别
| 运算符 | 类型 | 是否短路 | 典型场景 |
|---|---|---|---|
& |
非短路 | 需强制检查两侧条件(如数据校验) | |
&& |
短路 | 优先左侧判断(如空指针检查) | |
| 非短路 | 需执行所有操作(如日志记录) | ||
| 短路 | 快速失败(如默认值设置) |
示例对比:
// 短路与(安全)
if (list != null && list.size() > 0) {
// 若list为null,跳过size()检查,避免NullPointerException
}
// 非短路或(执行两侧)
boolean isValid = validateInput(input) | logError("Check failed");
// 无论输入是否有效,都会记录日志
关键注意事项
-
短路运算符优化性能
使用&&和可避免不必要的计算(如方法调用、复杂表达式)。 -
非短路运算符的特殊用途
当需要强制执行所有表达式时(如修改状态、写入日志),使用&或。 -
操作数必须是布尔类型
Java要求逻辑运算符的操作数为boolean(true/false),不可用整数替代:int x = 5; // if (x & 1) { ... } // 编译错误!需改为:(x & 1) != 0 -
运算符优先级
>&&> ,建议用明确逻辑:boolean result = (a || b) && !c; // 先计算!c,再结合||和&&
综合应用示例
public class AccessControl {
public static void main(String[] args) {
boolean isAdmin = true;
boolean hasPermission = false;
boolean isSystemActive = true;
// 组合逻辑:管理员或拥有权限,且系统必须活跃
boolean grantAccess = (isAdmin || hasPermission) && isSystemActive;
System.out.println("Access granted: " + grantAccess); // true
// 使用非短路或确保日志记录
boolean isDataValid = checkData() | log("Data checked");
}
}
| 运算符 | 符号 | 适用场景 |
|---|---|---|
| 逻辑非 | 条件取反 | |
| 短路与 | && |
高效检查(优先左侧) |
| 非短路与 | & |
强制两侧执行 |
| 短路或 | 快速匹配(左侧为true即跳过) | |
| 非短路或 | 确保所有操作执行 |
提示:
- 日常开发中优先使用
&&和(安全高效)。- 位运算符(
&、)在整数运算中含义不同,需区分上下文。
基于Java语言规范及开发实践总结,参考Oracle官方文档Java Operators。
