&& 是短路逻辑与,左侧为 false 时跳过右侧;& 是按位与或非短路逻辑与,右侧必执行,且支持整数运算。

Java 中 && 和 & 都能实现“逻辑与”,但关键区别不在结果,而在**是否执行右侧表达式**——这直接决定用在哪儿更安全、更合理。
看是否需要“短路”:左侧为 false 时,右侧还跑不跑?
这是最核心的判断依据:
-
&&:一旦左侧为
false,右侧整个跳过,不计算、不调用、不触发副作用(比如方法执行、变量自增、除零等) -
&:不管左侧真假,右侧一定执行。哪怕左侧是
false,也要把右边算完
看数据类型:是不是在做位运算?
& 是多面手,&& 只认布尔值:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 当操作数是
int、byte等整数类型时,&是按位与(比如5 & 3得1),&&根本不能用,编译报错 - 只有两个操作数都是
boolean时,两者才可互换语法(但行为仍不同)
看有没有副作用:右侧表达式会不会改变状态或抛异常?
这是实际开发中最容易踩坑的地方:
- 用 && 防异常:如
obj != null && obj.getName().length() > 0,前面不成立,后面根本不会触发空指针 - 用 & 强制执行:如
logSuccess() & sendEmail()(假设返回 boolean),想确保日志和邮件都发出去,就不能让短路拦住第二个调用 - 警惕自增陷阱:比如
flag & i++ > 0中,i一定会加 1;换成flag && i++ > 0,i就可能保持原值
日常写条件判断,优先选 &&
绝大多数 if 判断、while 条件、三元表达式里,你只关心逻辑结果,不依赖右侧副作用。此时用 && 更高效、更安全、也更符合直觉。只有明确需要两边都执行,或者在做整数位运算时,才用 &。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










