&&具有短路特性而&没有:&&左侧为false时右侧不执行,&两侧必执行;&&用于布尔逻辑判断更安全,&用于位运算或需强制执行两边的场景。

运算符类型不同
& 是多用途运算符:既可作布尔逻辑与,也可作整数按位与。
&& 是专用逻辑运算符:只能用于布尔类型,不支持位运算。
是否短路执行
这是最核心的区别:
&& 具有短路特性:左侧为 false 时,右侧表达式完全不执行;
& 没有短路特性:左右两侧表达式一定都会被计算,无论左侧结果如何。
副作用和安全性差异
因为 & 总是执行两边,可能引发意外行为:
- 可能触发空指针、除零等异常(如 obj == null & obj.toString().length() > 0);
- 可能造成多余计算或状态变更(如 flag & i++ > 5 中 i 一定会自增);
&& 则天然规避这些问题,常用于安全判空、资源检查等场景。
使用场景建议
日常条件判断一律优先用 &&:
- if 语句、while 条件、三元表达式中都适用;
& 仅在明确需要两边都执行,或进行位运算时使用:
- flags & FLAG_VISIBLE(掩码检测);
- 需要强制评估两个副作用表达式(极少见,通常说明设计可优化)。


















