Java从JDK 7起支持二进制(0b/0B)、八进制(0)、十六进制(0x/0X)字面量,均自动转为十进制存储;允许下划线分隔(非首尾),禁用非法字符与前导零;负号是运算符而非字面量一部分。

Java 从 JDK 7 开始支持二进制、八进制和十六进制字面量,可直接用对应前缀定义整数变量,编译器会自动转换为十进制值存储。
二进制字面量(以 0b 或 0B 开头)
必须使用小写 b 或大写 B,后跟 0 和 1 组成的数字序列。不允许有前导零(除开头的 0b 外),也不能加下划线在开头或结尾。
- int num1 = 0b1010; → 十进制 10
- long num2 = 0B1111_0000L; → 带下划线分隔,等价于 0B11110000,值为 240
- 错误写法:0b012(含 2)、0b_101(下划线开头)
八进制字面量(以 0 开头)
以数字 0 开头(注意不是 0o 或 0O),后跟 0–7 的数字。JDK 7+ 仍保留该语法,但需注意:以 0 开头的整数字面量默认按八进制解析。
- int oct1 = 012; → 八进制 12,等于十进制 10
- int oct2 = 0777; → 八进制 777,等于十进制 511
- ⚠️ 注意:08、09 是非法的(八进制不含 8、9)
十六进制字面量(以 0x 或 0X 开头)
以 0x 或 0X 开头,后跟 0–9 和 a–f(或 A–F)。字母不区分大小写,支持下划线分隔(JDK 7+)。
立即学习“Java免费学习笔记(深入)”;
- int hex1 = 0xFF; → 十六进制 FF,等于十进制 255
- long hex2 = 0X1A_2B_3C_4DL; → 合法,下划线仅用于可读性,不影响值
- 常见用途:颜色值(0xFF00FF)、位掩码(0x0000FFFF)
注意事项与技巧
- 所有进制字面量最终都存为补码形式的十进制整数,打印时默认输出十进制
- 如需按原进制输出,用 Integer.toBinaryString()、toOctalString()、toHexString()
- 负数不能直接用进制字面量表示(如 -0b1010 是合法的,但它是先解析 0b1010 再取负,不是“负二进制字面量”)
- 推荐用下划线提升长字面量可读性,例如:0b1100_1010_1111_0000


















