java位运算权限控制的核心是用2的幂表示独立权限,通过按位或(|)组合、按位与(&)校验、按位与非(& ~)删除、异或(^)切换权限,高效节省空间且性能优异。

Java 中用位运算实现权限控制,核心是把每个权限看作一个独立的二进制位,通过按位与(&)、或(|)、非(~)等操作高效判断、叠加、清除权限,既节省空间又提升性能。
权限定义:用 2 的幂次表示独立权限
每个权限对应一个唯一的 2 的整数次幂,确保二进制表示中只有 1 位为 1,互不重叠:
- READ = 1 → 二进制 0001
- WRITE = 2 → 二进制 0010
- DELETE = 4 → 二进制 0100
- EXECUTE = 8 → 二进制 1000
推荐用 public static final int 或枚举(配合 int 字段)定义,便于维护和 IDE 提示。
权限组合:用按位或(|)合并多个权限
用户拥有“读+写”权限,可直接用 READ | WRITE 得到值 3(0011);“读+删+执行”为 READ | DELETE | EXECUTE = 13(1101)。
组合后仍是一个整数,可存入数据库字段(如 INT 类型)、缓存或 Session 中,无需关联多张权限表。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
权限校验:用按位与(&)判断是否具备某权限
检查用户权限码 userPerms 是否包含 WRITE:
if ((userPerms & WRITE) == WRITE) { ... }
原理:只有当对应位都为 1 时,& 结果该位才为 1。例如 userPerms = 7 (0111),7 & 2 == 2 → 有写权限;7 & 8 == 0 → 无执行权限。
注意不能写成 (userPerms & WRITE) != 0 —— 虽然结果等价,但语义上不如显式比对更清晰、安全(尤其权限值非 2 的幂时易出错)。
权限增删改:用或(|)、与非(& ~)操作
-
添加权限:
userPerms |= DELETE; -
移除权限:
userPerms &= ~EXECUTE;(先取反再与,清零指定位置) -
切换权限:
userPerms ^= WRITE;(异或,有则去,无则加)
这些操作都是原子级整数运算,线程安全需配合 volatile 或锁(如修改共享用户权限对象时)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










