Java中“与”用&&(短路与)、“或”用||(短路或)表示,不可用汉字或单&、|;&&要求左右均为true才为true,左false时右不执行,可防空指针。

Java 中的“与”和“或”用 &&(短路与)和 ||(短路或)表示,不能直接写“与”“或”汉字,也不能只用单个 & 或 |(那是位运算符,语义不同)。
基本写法:&& 表示“且”,都为 true 才整体为 true
条件之间用 && 连接,左边为 false 时,右边不执行(短路特性),适合避免空指针或无效计算。
-
正确写法:
if (age >= 18 && age -
安全写法(防 NPE):
if (user != null && user.isActive())—— 若user为null,就不会调用isActive() -
错误写法:
if (age >= 18 & age —— 虽然语法合法,但失去短路保护,且易被误认为位运算
|| 表示“或”,任一为 true 就整体为 true
同样具备短路性:左边为 true 时,右边不再计算。
-
常见用法:
if (status == "pending" || status == "processing") -
简化判空:
if (str == null || str.trim().isEmpty())—— 若str为null,不会执行trim() -
注意顺序:把更可能为 true 或开销更小的条件放左边,提升效率(如
isValid() || expensiveCheck())
别混淆:& 和 | 是位运算符,也支持布尔,但不短路
它们会强制计算左右两边,一般不用在逻辑判断中,除非明确需要副作用或位操作。
立即学习“Java免费学习笔记(深入)”;
-
if (a() & b())→ 无论a()返回什么,b()一定执行 -
if (flag1 | flag2)→ 即使flag1是true,flag2仍会被取值 - 日常逻辑判断请坚持用
&&和||
组合与优先级:&& 比 || 优先级高
类似数学中乘高于加,&& 先算,再算 ||。不确定时加括号更清晰。
-
if (a || b && c)等价于if (a || (b && c)) - 想表达 “(a || b) 且 c” 就必须写:
if ((a || b) && c) - 复杂条件建议拆行或加括号,提升可读性,例如:
if ((isLogin && hasPermission) || isAdmin) { ... }


















