Java流程控制条件要求布尔表达式,逻辑运算符&&(短路与)、||(短路或)、!(非)用于构建复杂条件;&&适合多重校验且左小右大防空指针,||适合多选一场景,!用于取反,优先级易混淆时应加括号明确分组。

Java 中流程控制语句(如 if、while、for)的条件部分,本质是要求一个 布尔表达式。逻辑运算符(&&、||、!)就是用来组合多个布尔子表达式,构建更复杂、更贴近业务逻辑的判断条件。
用 &&(逻辑与)表示“同时满足”
只有左右两边都为 true,整个表达式才为 true。常用于多重限制,比如校验用户登录、参数合法性等。
-
建议把开销小、容易失败的条件放左边——利用短路特性(左边为
false时,右边不执行),避免空指针或无效计算。 - 例如:
if (str != null && !str.trim().isEmpty()),先判空再调方法,安全。 - 错误写法:
if (!str.trim().isEmpty() && str != null),若str为null,运行时报NullPointerException。
用 ||(逻辑或)表示“满足其一即可”
只要左右任意一边为 true,整个表达式就为 true。适合设置默认值、多选一场景。
- 同样有短路:左边为
true时,右边不执行。 - 例如:
if (role.equals("admin") || role.equals("manager")) { ... },任一角色都可进入管理逻辑。 - 注意:不要混淆
||和位运算符|;后者不短路,且操作的是整数位,一般不用在条件中。
用 !(逻辑非)翻转布尔值
单目运算符,把 true 变 false,false 变 true。常用于否定条件、简化嵌套。
- 推荐对复杂条件整体取反,而不是层层加
!,否则易读性差。比如:if (!(age 65))比if (age >= 18 && age 更难懂,应优先写后者。 - 可配合括号明确作用范围:
if (!list.isEmpty() && !(user == null)),比if (!list.isEmpty() && user != null)多余,直接写后者更清晰。
混用时注意优先级和括号
逻辑运算符优先级是:! > && > ||。但靠记忆易出错,强烈建议用括号显式分组。
- 例如:
if (a || b && c)等价于if (a || (b && c)),但别人读起来可能误以为是(a || b) && c。 - 清晰写法:
if ((a || b) && c)或if (a || (b && c)),意图一目了然。 - 涉及关系运算符(
==、、!=等)时,它们优先级高于逻辑运算符,所以if (x > 0 && y 不需要额外括号;但为统一风格,也可加上:if ((x > 0) && (y 。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











