java中用位掩码组合判断多个状态的核心是将各状态映射为互不重叠的2的幂次整数,通过按位或(|)组合、按位与(&)判断、按位运算动态增删改状态,需确保状态常量为2的幂且判断时显式与0比较。

Java 中用位掩码组合判断多个状态,核心是把每个状态映射为一个唯一的 2 的幂次(如 1、2、4、8…),然后用按位或(|)组合,用按位与(&)判断是否包含某状态。
定义状态常量
每个状态对应一个二进制位,推荐用 public static final int 或枚举 + int 值定义,确保互不重叠:
public static final int READ = 1public static final int WRITE = 1public static final int EXECUTE = 1public static final int DELETE = 1
组合多个状态
用按位或(|)把多个状态“叠加”成一个整数,结果的二进制位上 1 的位置就代表启用的状态:
int permissions = READ | WRITE | EXECUTE; // 值为 7(二进制 111)int fullAccess = READ | WRITE | EXECUTE | DELETE; // 值为 15(1111)
判断是否包含某个状态
用按位与(&)检测目标位是否为 1,结果非零即表示包含该状态:
if ((permissions & WRITE) != 0) { /* 有写权限 */ }if ((permissions & DELETE) == 0) { /* 没有删除权限 */ }- 注意:必须和 0 比较,不能直接用
if (permissions & WRITE)(Java 不允许非布尔值作条件)
添加、移除或切换状态
借助位运算动态修改状态组合:
-
添加:用
|=,如permissions |= DELETE; -
移除:用
&= ~,如permissions &= ~WRITE;(先取反再与) -
切换:用
^=,如permissions ^= EXECUTE;(有则去,无则加)
不复杂但容易忽略细节:状态值必须是 2 的幂,判断时必须显式比较是否非零,组合和操作都基于整数位运算,轻量且高效。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











