&&采用短路求值,左侧为false时右侧不执行,避免空指针等异常;左侧为true时才执行右侧,可能触发副作用;而&不短路,左右均执行。

Java 中的逻辑与运算符(&&)采用**短路求值(short-circuit evaluation)**,即左边表达式为 false 时,右边表达式**不会执行**。
左边为 false,右边不执行
这是 && 最关键的行为。JVM 先计算左操作数,如果结果为 false,整个表达式已确定为 false,无需再计算右边,直接跳过。
例如:
boolean a = false; boolean b = true; boolean result = a && someMethod(); // someMethod() 根本不会被调用
这种机制常用于安全检查,比如:
立即学习“Java免费学习笔记(深入)”;
if (list != null && !list.isEmpty()) { ... }
若 list 为 null,!list.isEmpty() 就不会执行,避免空指针异常。
左边为 true,右边必须执行
只有当左表达式结果为 true 时,JVM 才会继续计算右表达式,最终结果取决于右边的值。
例如:
boolean x = true; boolean y = false; boolean r = x && y; // 先算 x → true,再算 y → false,r = false
注意:右表达式中的任何副作用(如修改变量、打印日志、抛异常)在此时才会发生。
与按位与 & 的区别
& 是按位与(对布尔类型也适用),但它**不短路**:左右两边**总是都会执行**。
-
a && b():若a为false,b()不调用 -
a & b():无论a是什么,b()一定执行
所以除非明确需要强制执行右边(比如依赖其副作用),否则逻辑判断中应优先使用 &&。
常见误用提醒
不要在 && 右边放有副作用且必须执行的逻辑,比如:
if (isValid() && logAccess()) { ... } // logAccess() 可能不执行!
如果日志必须记录,应拆成两步或改用 &(但更推荐显式调用):
logAccess();
if (isValid()) { ... }
理解短路特性,才能写出安全、可预测的条件逻辑。


















