java权限控制中位运算高效组合的核心是将权限映射到二进制独立位,用整数承载开关状态,通过&、|、&~、^实现判断、授权、撤销、切换;权限常量必须为2的幂(即仅一个二进制位为1)。

Java 位运算在权限控制中高效组合的核心,是把每个权限映射到二进制的独立位上,用一个整数(如 int)承载全部开关状态,通过 &、|、& ~、^ 四个基础操作完成判断、授权、撤销和切换——不依赖集合、不触发对象分配,单指令即可完成。
权限常量必须是 2 的幂
每个权限值只能有且仅有一个二进制位为 1,否则位运算会互相干扰。推荐用 1 显式定义:
public static final int READ = 1 → <code>0b0001public static final int WRITE = 1 → <code>0b0010public static final int DELETE = 1 → <code>0b0100public static final int EXECUTE = 1 → <code>0b1000
避免手写 READ = 1, WRITE = 2,虽等价但可读性差、新增权限易错位。
用 | 合并多个权限(设置)
按位或天然适合“开启多个开关”:只要某一位是 1,结果该位就是 1。
-
int userPerms = READ | WRITE | EXECUTE;→ 值为11(二进制1011) - 相当于一次性置位第 0、1、3 位,其余位保持为 0
组合过程无顺序依赖,WRITE | READ 和 READ | WRITE 结果完全一致。
用 & 判断是否拥有某权限(校验)
按位与用于“提取特定位”:仅当目标位和掩码位都为 1,结果才非零。
-
if ((userPerms & DELETE) != 0) { ... }→ 检查第 2 位是否开启 - 不能简写为
if (userPerms & DELETE),Java 不允许非布尔类型作条件表达式 - 严格写法建议用
(userPerms & DELETE) == DELETE,便于未来扩展(如权限值含多比特)
用 & ~ 和 ^ 灵活管理权限状态
撤销和切换权限无需遍历、不依赖条件分支,直接位操作:
- 撤销某权限:
userPerms &= ~WRITE;(先取反再与,精准清零第 1 位) - 批量撤销:
userPerms &= ~(READ | DELETE); - 切换权限(开变关、关变开):
userPerms ^= EXECUTE;
这些操作都是原子级的,线程安全需配合 AtomicInteger 或同步机制,但运算本身无竞态。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











