java位运算实现权限管理的核心是将权限映射为2的幂次值,用按位或(|)组合、按位与(&)校验,支持高效多权限叠加与快速判断,需控制权限数≤31个(int范围)或改用long。

Java 中用位运算实现权限状态的组合与校验,核心是把每个权限映射为一个唯一的 2 的幂次值(如 1、2、4、8…),再通过按位或(|)组合、按位与(&)校验。这种方式高效、省内存,且天然支持多权限叠加与快速判断。
定义权限常量(用 2 的幂)
每个权限对应一个独立的二进制位,避免冲突:
-
READ = 1 → 二进制
0001 -
WRITE = 2 →
0010 -
DELETE = 4 →
0100 -
EXECUTE = 8 →
1000
推荐用 public static final int 或枚举(配合 int 值)定义,确保不可变。
组合多个权限(用按位或 |)
用户拥有 READ + WRITE 权限,可表示为:
int userPerms = READ | WRITE; // 1 | 2 = 3 → 二进制 0011
支持链式组合:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
READ | DELETE | EXECUTE→1 | 4 | 8 = 13(1101) - 重复或同一个权限无副作用:
READ | READ == READ
校验是否具备某权限(用按位与 &)
判断 userPerms 是否含 WRITE:
if ((userPerms & WRITE) == WRITE) { ... }
原理:只有目标位为 1 且 userPerms 对应位也为 1 时,结果才等于该权限值。常见写法也接受非零判断:
-
(userPerms & WRITE) != 0—— 更简洁,语义等价 - 不建议直接写
userPerms & WRITE当布尔用(Java 不允许 int 隐转 boolean)
增删权限(用 | 和 &~)
动态更新权限值:
-
添加 WRITE:
userPerms |= WRITE -
移除 DELETE:
userPerms &= ~DELETE(~4是按位取反,屏蔽第 3 位) -
清空所有权限:
userPerms = 0
注意:~ 是按位取反,对 int 是 32 位操作,但配合 & 使用时只影响对应位,安全可靠。
不复杂但容易忽略:权限总数别超过 31 个(int 有符号,最高位是符号位;若需更多,改用 long,最多支持 63 个权限)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










