java用位运算管理权限的核心是将每个权限映射为唯一二进制位,通过按位或(|)赋予权限、按位与(&)检查权限、按位与加取反(& ~)撤销权限,权限常量须为2的幂次以确保互斥。

Java 中用位运算管理权限,核心是把每个权限映射为一个唯一的二进制位,再通过按位或(|)、按位与(&)、按位取反(~)等操作实现赋予、检查和撤销。
定义权限常量
每个权限对应一个 2 的幂次值,确保各权限在二进制中只占一位,互不重叠:
public static final int READ = 1public static final int WRITE = 1public static final int DELETE = 1public static final int EXECUTE = 1
赋予权限(按位或)
用 | 把新权限“叠加”到当前权限值上,不影响已有权限:
- 初始权限:
int permissions = READ;→0001 - 添加 WRITE:
permissions |= WRITE;→0001 | 0010 = 0011 - 支持批量赋予权限:
permissions |= READ | DELETE;
检查权限(按位与)
用 & 判断某权限是否已启用:结果非零即拥有该权限:
if ((permissions & WRITE) != 0) { /* 有写权限 */ }if ((permissions & (READ | EXECUTE)) == (READ | EXECUTE)) { /* 同时具备读和执行 */ }
撤销权限(按位与 + 取反)
先对要撤销的权限取反(~),再用 & 清除对应位:
- 撤销 WRITE:
permissions &= ~WRITE;→0011 & ~0010 = 0011 & 1101 = 0001 - 撤销多个:
permissions &= ~(READ | DELETE); - 注意:
~是整数取反,所以推荐用int或long,避免符号扩展问题;也可用Integer.toBinaryString()调试验证
不复杂但容易忽略细节:权限常量必须互斥、撤销时别误用 |=、检查时记得加括号避免运算符优先级问题。实际项目中可封装成工具类或枚举配合 EnumSet,但底层逻辑仍是位运算。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











