Java中&&和||具有短路求值特性:&&在左操作数为false时跳过右操作数,||在左操作数为true时跳过右操作数;二者不可与非短路的&、|位运算符混淆。

Java 中的“与”(&&)和“或”(||)是常用的逻辑运算符,用于组合多个布尔表达式,控制程序流程。它们的关键特点是短路求值——一旦结果确定,就不再计算后续表达式。
“与”运算符(&&):全真才真
只有当左右两个条件都为 true 时,整个表达式才返回 true;只要左边为 false,右边就不会执行。
- 适合用在需要“同时满足多个条件”的场景,比如登录验证、权限检查
- 常用来避免空指针异常:例如
str != null && str.length() > 0,如果str是null,就不会调用length()方法 - 不要和位运算符
&混淆:&对布尔值也做“与”,但不短路;对整数则是按位与
“或”运算符(||):一真即真
只要左右任意一个条件为 true,整个表达式就返回 true;如果左边已经为 true,右边表达式不会执行。
- 适合“满足任一条件即可”的逻辑,比如参数默认值处理:
name != null && !name.isEmpty() ? name : "未知"可配合||简化判断逻辑 - 安全地提供备选方案:例如
user.getName() != null || user.getDefaultName() != null,但注意这里只是判断是否非空,不是赋值 - 同样要区分位运算符
|:它不短路,且可用于整数按位或
常见误用和注意事项
初学者容易忽略短路特性带来的副作用或性能影响。
- 避免在右侧表达式中写有副作用的操作(如方法调用、变量修改),因为可能不被执行
- 比较字符串等对象时,别直接用
==判断内容相等,应使用.equals(),否则逻辑可能出错 - 优先级上,
!最高,其次是&&,最后是||;复杂表达式建议加括号明确意图,比如(a > 0) && (b
简单示例对比
以下代码能直观体现短路行为:
int a = 0; boolean result1 = false && (++a > 0); // a 仍为 0,右边没执行 boolean result2 = true || (++a > 0); // a 仍为 0,右边没执行
而换成 & 或 |,a 就会变成 1。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











