逻辑或(||)用于布尔条件判断且支持短路求值,按位或(|)用于整数位运算且不短路;二者类型和用途严格区分,混用会导致编译错误。

逻辑或(||)和按位或(|)在 Java 中用途不同,不能混用。逻辑或是布尔运算,用于条件判断;按位或是整数位级操作,用于二进制位处理。
逻辑或 ||:用于布尔表达式,支持短路
当左侧表达式为 true 时,右侧不会执行——这叫“短路求值”,常用来避免空指针或无效操作。
- 适合写在
if、while等条件中 - 左右操作数必须是
boolean类型 - 示例:
if (str != null && !str.isEmpty() || flag)—— 先判非空再判内容,最后或上标志位
按位或 |:对整数的每一位做或运算
把两个整数转成二进制,相同位置只要有一个是 1,结果该位就是 1。常用于权限合并、标志位设置。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 操作数一般是
int、byte等整数类型 - 不短路,左右都计算
- 示例:
int permissions = READ | WRITE;(假设READ = 1、WRITE = 2,结果是3,即二进制011)
别把 | 当 || 用,也别把 || 当 | 用
编译器会报错:比如 if (a | b) 中若 a、b 是 int,会提示“无法将 int 转换为 boolean”;反过来,flag1 || flag2 中若它们是 int,也不合法。
- 布尔变量之间只能用
||或&& - 整数之间想组合标志位,用
|;想清零某位,用& ~MASK - 注意:
|和&还有对应的“短路版”||、&&,但只有布尔类型能用短路版
一个常见混合场景:用按位或设权限,用逻辑或控制流程
比如用户有多个权限常量,用按位或组合;之后用逻辑或判断是否满足任一条件:
-
// 定义权限
static final int READ = 1 <br><code>static final int WRITE = 1 <br><code>static final int DELETE = 1 -
// 用户权限(按位或组合)
int userPerm = READ | DELETE; -
// 判断是否有读或删权限(逻辑或)
if ((userPerm & READ) != 0 || (userPerm & DELETE) != 0) { ... }
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










