Java中按位异或运算符(^)对两操作数逐位比较:相同为0、不同为1;示例5^3得6,12^12得0,7^0得7;具自反性、交换律、归零律;常用于找唯一数、无临时变量交换、翻转标志位等。

Java 中的按位异或运算符(^)是对两个整数的操作数逐位比较:相同为 0,不同为 1。它不关心数值大小,只看二进制表示中每一位是否一致。
基本运算规则和示例
例如:5 ^ 3 的计算过程如下:
- 5 的二进制是 101,3 的二进制是 011(补零对齐为三位)
- 逐位异或:
101
011
---
110 → 十进制为 6
再比如:12 ^ 12 → 二进制全相同,结果为 0;7 ^ 0 → 任何数与 0 异或都等于自身,结果仍是 7。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
常用实用场景
异或有三个关键性质支撑实际用途:自反性(a ^ b ^ b = a)、交换律、归零律(a ^ a = 0)。
立即学习“Java免费学习笔记(深入)”;
-
找出唯一出现一次的元素:数组中其余数都成对出现,仅一个数落单。遍历全部异或,成对的抵消为 0,最后剩下那个数。
如:int[] nums = {4,1,2,1,2}; int res = 0; for (int n : nums) res ^= n;→ 结果为 4 -
交换两个整数变量(不借助临时变量):
a ^= b; b ^= a; a ^= b;
注意:仅适用于基本类型,且不能用于同一变量(如swap(x, x)会变 0) -
翻转某个标志位:比如权限标记中启用/禁用日志功能,
flags ^= ENABLE_LOGGING;比先判断再赋值更简洁安全
使用时要注意的细节
异或操作严格作用于整型(int、long、short、byte),不支持浮点数或对象引用。
- 布尔值虽可参与
^运算(JVM 将其视作 1-bit 整数),但语义模糊、可读性差,应避免在条件逻辑中混用 - 不要把
^和逻辑异或(如 Python 的!=表达布尔差异)混淆;Java 中没有原生布尔异或运算符,^对 boolean 是按位处理,不是逻辑判断 - 加密解密中可用异或实现简单加扰(如用固定密钥字符循环异或字符串),但仅限教学或轻量场景,不可用于真实安全需求

















