日常条件判断一律用&&;仅当右侧表达式必须执行(如含副作用操作)时才用&。&&短路安全高效,可避免空指针、跳过耗时操作;&强制执行两边,适用于调试日志、双因子验证等场景。

选 && 还是 &,关键看是否需要“右边一定执行”。日常条件判断一律用 &&;只有明确要求右侧表达式必须运行(比如含副作用的赋值、方法调用、计数器自增等),才考虑用 &。
优先用 && 的场景
绝大多数 if 判断、while 条件、三元表达式中,&& 是默认选择。它安全、高效、符合直觉。
- 避免空指针:如
str != null && str.length() > 0,左边为 false 时不会调用str.length(),防止崩溃 - 跳过耗时操作:如
user.isAuthenticated() && user.hasPermission("delete"),未登录就不再查权限 - 逻辑清晰:表达“先满足前提,再检查细节”的自然语义
必须用 & 的少数情况
& 不具备短路特性,左右两边总会执行。这在需要“强制触发副作用”时才有意义。
- 调试或日志埋点:如
isValid & logAttempt(),无论 isValid 如何都记录一次尝试 - 原子性校验:两个布尔方法都有必要执行(比如双因子验证中的两个独立检查),且不能因第一个失败就跳过第二个
- 位运算上下文混淆时需注意:当操作数是整数(如
5 & 3),& 是按位与,和逻辑无关——此时不是“选择”,而是语法要求
一个典型对比示例
看这段代码的输出差异:
int x = 1;
boolean a = false;
if (a & (++x == 2)) {} // x 变成 2,右侧被执行
System.out.println(x); // 输出 2
x = 1;
if (a && (++x == 2)) {} // x 仍是 1,右侧被跳过
System.out.println(x); // 输出 1
只要右侧有变量修改、I/O、方法调用等可观测行为,&& 和 & 的结果就可能不同。没特殊需求,别让代码依赖这种差异。
简单总结
写条件判断时,&& 是常规武器;& 是特殊工具,用前要想清楚:右侧不执行会出问题吗?如果答案是否定的,那就该用 &&。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











