位掩码用2的幂次作为唯一标识,通过按位或组合、按位与判断、按位与取反移除、异或翻转来高效管理多个布尔状态,要求各状态值互不重叠。

位掩码通过二进制位的独立开关特性,让多个布尔状态能压缩在一个整数里高效存储和判断。核心是用 2 的幂次(1, 2, 4, 8…)作为各个状态的唯一标识值,再用按位运算操作它们。
定义状态常量
每个状态对应一个唯一的 2 的幂次值,确保二进制表示中只有一位为 1:
- // 推荐用 const 声明,避免拼写错误和魔数
- const STATUS_ACTIVE = 1; // 0b0001
- const STATUS_LOCKED = 2; // 0b0010
- const STATUS_HIDDEN = 4; // 0b0100
- const STATUS_DIRTY = 8; // 0b1000
组合多个状态(设置)
用按位或(|)把多个状态“叠加”到一个变量中:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- // 用户同时处于激活、锁定、脏数据状态
- let userStatus = STATUS_ACTIVE | STATUS_LOCKED | STATUS_DIRTY;
- // 结果:1 | 2 | 8 = 11 → 二进制 0b1011
判断是否包含某个状态(检查)
用按位与(&)配合比较,只有对应位都为 1 才返回真值:
- // 检查是否激活
- if (userStatus & STATUS_ACTIVE) { /* 是激活状态 */ }
- // 检查是否同时激活且锁定
- if ((userStatus & (STATUS_ACTIVE | STATUS_LOCKED)) === (STATUS_ACTIVE | STATUS_LOCKED)) { ... }
添加、移除或翻转单个状态
利用按位或、按位与取反、按位异或实现动态修改:
- // 添加隐藏状态
- userStatus |= STATUS_HIDDEN;
- // 移除锁定状态(用取反后按位与)
- userStatus &= ~STATUS_LOCKED;
- // 切换脏数据状态(异或翻转)
- userStatus ^= STATUS_DIRTY;
不复杂但容易忽略:所有状态值必须互不重叠(即都是 2 的幂),否则按位运算会误判;实际项目中可封装成工具函数或类来提升可读性与安全性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










