java从jdk 7起支持二进制字面量,以0b或0b开头,仅含0、1,编译期转为十进制整数;需注意类型推断、范围检查及旧版本兼容性。

Java 中二进制字面量从 JDK 7 开始支持,用 0b 或 0B 开头,后面只能跟 0 和 1,编译器在编译阶段就把它解析为对应十进制整数值,不是字符串、也不依赖运行时转换。
基本写法与合法示例
直接在变量声明中使用,语法简洁明确:
-
int a = 0b1010;→ 十进制 10 -
short s = 0B1111_0000;→ 值为 240,下划线提升可读性(JDK 7+ 支持) -
long mask = 0b1000_0000_0000_0000_0000_0000_0000_0000L;→ 需加L后缀,否则超出int范围会编译失败 -
byte flag = 0b0000_0001;→ 编译通过,值在byte范围内(-128 ~ 127)
常见错误写法
这些写法会在编译时报错,不是运行时异常:
-
int x = b1010;→ 缺少前缀0,必须是0b或0B -
int y = 0b102;→ 含非法字符2,二进制只允许0和1 -
byte z = 0b1000_0000_0000;→ 值超byte范围且未强制转换,编译失败 -
long w = 0b1111_1111_1111_1111_1111_1111_1111_1111;→ 缺少L,会被当作int处理,但该值已溢出
适合用二进制字面量的典型场景
当语义天然与位相关时,比十进制更直观、更少出错:
- 定义位掩码:
final int FLAG_READ = 0b0000_0001;、FLAG_WRITE = 0b0000_0010; - 硬件寄存器配置:
int ctrlReg = 0b0000_0101;(清晰看出 bit0 和 bit2 置位) - 协议字段解析:
boolean isAck = (flags & 0b0000_1000) != 0; - 颜色或状态组合:
int status = 0b1100_0011;比195更易对齐设计文档中的位图说明
注意类型与兼容性
字面量本身无类型,但 Java 按默认规则推断:
- 不加后缀 → 默认是
int类型 - 需要
long→ 必须加L(推荐大写,避免和数字1混淆) - 赋给
byte或short→ 值必须在目标类型范围内,否则需显式强制转换,如(byte)0b1111_1111 - JDK 6 及更早版本不支持
0b,若项目需兼容旧版本,应改用Integer.parseInt("1111", 2)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











