Java中用按位或(|)实现状态标记的核心是“叠加”,状态值必须是2的幂次方以确保各占唯一二进制位,如public static final int VIEW = 1。

Java 中用按位或(|)实现状态标记,核心是“叠加”——在已有状态基础上安全地开启新状态位,不干扰其他位。
状态必须是 2 的幂次方
每个状态值只能占用二进制中**唯一一位**,否则会误触多个标志。正确写法:
public static final int VIEW = 1 → <code>0001public static final int EDIT = 1 → <code>0010public static final int DELETE = 1 → <code>0100
错误示例:public static final int BAD = 3;(二进制 0011)会同时影响第 0 和第 1 位,导致逻辑混乱。
用 |= 原地叠加状态
这是最常用、最推荐的方式,语义清晰且线程安全(单变量操作):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
int status = 0;→ 初始无任何状态 -
status |= VIEW;→ 变为0001 -
status |= EDIT;→ 变为0011(VIEW + EDIT 同时生效) -
status |= VIEW | DELETE;→ 一次叠加多个,等价于两次|=
注意:|= 是复合赋值,比 status = status | VIEW 更简洁、不易出错,也避免重复计算左操作数。
判断状态是否启用:用按位与(&)
叠加靠 |,查询靠 &:
-
(status & EDIT) != 0→ 表示 EDIT 已启用 - 不能写成
(status & EDIT) == EDIT,虽然对int成立,但换成long或未来扩展时易出错 - 推荐统一用
!= 0判断,可读性强、兼容性好
清除某个状态:必须用 &= ~FLAG
按位或只负责“开”,不能“关”。要关闭某状态,得先取反再与:
-
status &= ~EDIT;→ 精确清零第 1 位,其余位不变 - ❌ 错误:
status |= ~EDIT→ 会把除第 1 位外所有位全设为 1,彻底破坏状态 - ✅ 替代方案:
status ^= EDIT可切换该位(开变关、关变开),适合 toggle 场景

















