Java中可用异或运算符^高效切换布尔状态,isOn ^= true可简洁翻转true/false;多状态开关则用int位掩码,status ^= FLAG_WIFI实现单比特切换。

Java 中可以用位运算符(特别是异或 ^)高效实现布尔状态的开关切换,无需 if 判断,一行代码即可翻转 true/false。
用 ^= 异或赋值切换布尔状态
布尔值在底层可视为 0/1,而 true ^ true == false、false ^ true == true,所以用 ^= true 就能稳定翻转:
-
推荐写法:
isOn ^= true;—— 简洁、安全、可读性强 - 等价于:
isOn = !isOn;,但异或方式更贴近“开关”语义 - 注意:不能对包装类
Boolean直接使用(会触发自动拆箱,但需确保非 null)
用整数位掩码控制多状态开关(进阶)
当一个变量需管理多个独立开关(如权限位、功能开关)时,可用 int 的每一位表示一个状态:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 定义标志位:
final int FLAG_WIFI = 1 ,<code>final int FLAG_BLUETOOTH = 1 - 开启某位:
status |= FLAG_WIFI; - 关闭某位:
status &= ~FLAG_WIFI; -
切换某位(开关核心):
status ^= FLAG_WIFI;—— 异或同一掩码,0→1 或 1→0
避免常见误区
- 别用
++或!模拟开关:如state = 1 - state仅适用于 0/1 整数,不通用;!state仅限 boolean - 不要对
Boolean包装类型直接异或:flag ^= true在 flag 为 null 时抛NullPointerException - 异或开关是无状态的:每次执行都严格取反,适合响应式点击、快捷键切换等场景
本质上,开关就是“变与不变”的二元翻转,而异或恰好是数学上最自然的翻转运算。用好 ^=,让状态逻辑更轻量、更可靠。
立即学习“Java免费学习笔记(深入)”;

















