和的区别?
更多面试题请看这里:https://interview.raoyunsoft.com/
在Java中,&
和&&
都是逻辑运算符,但它们的行为有本质区别:
1. &
(按位与/逻辑与)
- 两种用法:
- 按位与:对整数类型进行二进制位运算(如
5 & 3 = 1
)。 - 逻辑与:对布尔值进行判断(如
true & false = false
)。
- 按位与:对整数类型进行二进制位运算(如
- 关键特性:
无论左侧表达式结果如何,一定会执行右侧表达式。
2. &&
(短路与)
- 仅用于布尔逻辑判断(不能用于整数位运算)。
- 核心机制:
若左侧表达式结果为false
,则右侧表达式被跳过(短路),直接返回false
。
🔍 核心区别对比
特性 | & | && |
---|---|---|
右侧表达式执行 | 始终执行 | 左侧为false 时跳过 |
适用场景 | 整数位运算/布尔逻辑 | 仅布尔逻辑 |
空指针风险 | 高(可能触发NPE) | 低(通过短路避免) |
⚠️ 经典案例:避免空指针异常
String username = null;// 危险写法:使用 & 会触发 NullPointerException
if (username != null & !username.equals("")) { // 抛出异常!
}// 安全写法:使用 && 短路避免异常
if (username != null && !username.equals("")) {// 安全执行
}
关键点:
- 顺序不可交换!必须先检查
null
再调用方法。&&
的短路特性是防御性编程的核心工具。
💡 扩展类比
|
(逻辑或)和 ||
(短路或)有类似区别:
||
左侧为true
时跳过右侧计算,常用于默认值场景:String name = inputName || "Default"; // JavaScript示例
🌟 实践建议
- 日常编码:优先使用
&&
和||
,避免不必要的计算和潜在异常。 - 位运算:仅在处理整数二进制操作时使用
&
/|
。 - JavaScript迁移:熟悉短路运算可无缝过渡到JS的高效编程模式(如条件渲染)。