Java权限组合用按位或(|)将2的幂权限标志叠加到整数中,每位独立;用|=追加权限,用&判断权限;超32位需改用long及1L<<n。

Java 中用按位或(|)组合权限,核心是把多个独立的权限标志“叠加”到一个整数里,每位代表一种权限,互不干扰。
权限常量必须是 2 的幂
每个权限值只能占用二进制中唯一一位,否则会重叠、误判。推荐用左移定义:
-
public static final int READ = 1 << 0;→0001 -
public static final int WRITE = 1 << 1;→0010 -
public static final int DELETE = 1 << 2;→0100 -
public static final int EXECUTE = 1 << 3;→1000
用 | 把权限“加进去”
初始权限为 0,每次用 |= 追加新权限,等价于 mask = mask | NEW_PERMISSION:
-
int permissions = 0;→0000 -
permissions |= READ;→0000 | 0001 = 0001 -
permissions |= WRITE;→0001 | 0010 = 0011(同时拥有读和写) -
permissions |= DELETE | EXECUTE;→ 一次叠加多个,结果是1111
组合后怎么验证?用 & 判断
叠加只是“设置”,判断是否真有某权限,得靠按位与(&):
立即学习“Java免费学习笔记(深入)”;
-
(permissions & READ) != 0→ 有读权限 -
(permissions & (WRITE | EXECUTE)) != 0→ 有写或执行任一权限 - 别写成
(permissions & READ) == READ,虽在 int 下等效,但换成 long 就容易出错
注意边界和类型匹配
32 种权限够用就用 int;超了必须升级为 long,且所有常量改用 1L << n:
- 错:
public static final int FLAG_40 = 1 << 40;→ 左移溢出,高位被截断 - 对:
public static final long FLAG_40 = 1L << 40;,搭配long permissions


















