Java位掩码本质是用整数二进制每位作独立开关,通过&、|、^、~及移位运算管理状态;权限常量用1<<n定义确保单一位为1;|组合权限,&非零判断权限,& ~清除权限。

Java 中用位掩码(Bitmask)本质是把一个整数的二进制每一位当作独立开关来用,核心靠 &(按位与)、|(按位或)、^(按位异或)、~(取反)和移位(<<、>>、>>>)这五类运算符协同完成状态管理。
定义权限常量:用左移固定每一位
每个权限独占一位,避免重叠干扰:
-
查看权限 →
public static final int VIEW = 1 << 0;(即0b0001) -
编辑权限 →
public static final int EDIT = 1 << 2;(即0b0100) -
删除权限 →
public static final int DELETE = 1 << 3;(即0b1000)
关键点:1 << n 确保只在第 n 位设 1,其余全为 0,方便后续组合与判断。
组合多个状态:用按位或(|)叠加
给用户一次性赋多个权限,直接用 | 连接:
立即学习“Java免费学习笔记(深入)”;
int userMask = VIEW | EDIT | DELETE;- 结果二进制类似
0b1101,表示三项权限同时启用 - 重复赋同一权限不影响结果(
a | a == a),天然幂等
判断是否拥有某权限:用按位与(&)加非零检测
检查某一位是否为 1,只需与对应掩码做 &,再判是否非零:
if ((userMask & EDIT) != 0) { /* 有编辑权 */ }- 原理:只有目标位同为 1 时,& 结果该位才为 1;其他位全被掩掉
- 不能写成
== 1,因为掩码本身可能大于 1(如EDIT是 4)
清除某项权限:用按位与 + 取反掩码(& ~)
想关掉编辑权限,但保留其它所有权限:
userMask = userMask & ~EDIT;-
~EDIT把0b0100变成0b1011(高位补 1,但 & 后只影响低 4 位) - 相当于“保留除 EDIT 外的所有位”,安全、简洁、无副作用


















