位运算会触发自动拆箱,因Java只支持基本类型参与位运算;若包装类为null则抛NullPointerException;不触发装箱,也不支持跨类型隐式转换。

会触发自动拆箱。
位运算必须操作基本类型值
Java 的位运算符(&、|、^、~、<<、>>、>>>)只定义在基本数据类型上,不支持直接对包装类对象运算。只要表达式中出现包装类参与位运算,编译器就必须先将其转为对应基本类型——也就是自动拆箱。
- Integer a = 5; int b = a & 3; → a 被拆箱为 int 后再与 3 进行按位与
- Long x = 0x1L, y = 0x2L; long z = x | y; → x 和 y 均被拆箱为 long
- if ((flags & MASK) != 0) 中 flags 是 Integer 类型 → 拆箱后才可参与 &
拆箱失败会导致 NullPointerException
如果参与位运算的包装类变量为 null,拆箱动作会在运行时调用 xxxValue() 方法(如 intValue()),而 null.intValue() 直接抛出 NullPointerException。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- Integer i = null; int r = i & 0xFF; → 运行时报 NPE,不是编译错误
- 这种问题常出现在从 Map 或数据库查询结果中取值后再做掩码判断的场景
不会触发装箱,也不支持跨类型隐式转换
位运算本身不涉及装箱;相反,它强制要求操作数是基本类型。同时,Java 不允许跨包装类类型自动转换:
立即学习“Java免费学习笔记(深入)”;
- Integer i = 1; long r = i & 0xFFL; → 先拆箱为 int,再通过基本类型拓宽转换为 long(两步:拆箱 + 类型提升)
- Integer i = 1; Long l = i & 0xFF; → 编译失败,不能把 int 结果自动装箱为 Long

















