Java中&&和||支持短路求值,可避免空指针等危险操作;混合使用时应加括号明确优先级;慎用非短路的&和|;可链式校验或提供默认回退。

Java 中的逻辑运算符 &&(逻辑与)和 ||(逻辑或)天然支持短路求值,这是提升程序安全性与效率的关键机制;配合括号和布尔表达式,还能灵活实现多条件组合判断。
短路求值:避免无效或危险操作
短路求值指当左侧操作数已能确定整个表达式结果时,不再计算右侧操作数。
-
&&短路:左侧为false,整个结果必为false,右侧不执行 -
||短路:左侧为true,整个结果必为true,右侧不执行
典型用途是防止空指针异常:
if (str != null && str.length() > 5) { ... }
若 str 为 null,str.length() 不会被调用,避免抛出 NullPointerException。
立即学习“Java免费学习笔记(深入)”;
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
条件组合:用括号明确优先级
Java 中 && 优先级高于 ||,但混合使用时强烈建议加括号,提升可读性与可控性。
// 推荐:意图清晰,不易出错
if ((age >= 18 && hasID) || isStaff) { ... }
// 避免:依赖默认优先级,易误解
if (age >= 18 && hasID || isStaff) { ... } // 实际等价于 (age>=18 && hasID) || isStaff,但不直观
慎用非短路运算符 & 和 |
& 和 | 是位运算符,也支持布尔类型,但不短路——左右两边总会执行。
- 除非明确需要强制执行右侧副作用(如日志、状态更新),否则应避免在条件判断中使用
- 例如:
if (isValid() & saveLog())会始终调用saveLog(),即使isValid()返回false
日常条件判断请坚持用 && 和 ||。
实际组合技巧:链式校验与默认回退
利用短路特性可构建安全的链式判断逻辑:
// 检查用户权限:先非空 → 再角色 → 最后功能开关
if (user != null && "admin".equals(user.getRole()) && featureEnabled) {
grantAccess();
}
// 提供默认行为(类似三元逻辑延伸)
String name = (user != null && user.getName() != null) ? user.getName() : "Guest";
这种写法既简洁又健壮,无需嵌套 if 或提前 return。

















