Java支持二进制(0b/0B)、八进制(0开头)、十六进制(0x/0X)整数字面量,需严格遵循语法:二进制仅含0/1,八进制限0–7,十六进制含0–9/a–f;默认int型,long需加L,超范围需强制转换。

Java中支持直接用二进制、八进制和十六进制字面量表示整数,但语法有明确要求,写错会编译失败。
二进制字面量(以 0b 或 0B 开头)
从 Java 7 开始引入,必须以 0b 或 0B 开头,后面只能跟 0 和 1。
- 合法示例:int a = 0b1010;(等于十进制 10)
- 合法示例:long b = 0B1111_0000_1111_0000L;(支持下划线分隔,增强可读性)
- 非法示例:int c = b1010;(缺少前缀 0)
- 非法示例:int d = 0b123;(含非法字符 2、3)
八进制字面量(以 0 开头,仅限数字 0–7)
Java 中以 单个 0 开头的整数字面量被视为八进制(注意:不是 0o 或 0O,那是 Python 的写法)。
- 合法示例:int x = 012;(等于十进制 10,因为 1×8¹ + 2×8⁰ = 10)
- 合法示例:int y = 0777;(等于十进制 511)
- 非法示例:int z = 08;(八进制不含数字 8,编译报错)
- 注意:00 是合法的(即十进制 0),但 09 会编译失败
十六进制字面量(以 0x 或 0X 开头)
最常用的一种,以 0x 或 0X 开头,后接 0–9、a–f(不区分大小写)。
立即学习“Java免费学习笔记(深入)”;
- 合法示例:int h1 = 0xFF;(等于 255)
- 合法示例:long h2 = 0XdeadC0deL;(支持大小混写和 L 后缀)
- 合法示例:short s = 0x00FF;(只要值在 short 范围内即可)
- 注意:下划线可用于分隔(如 0xFF_FF_FF_FF),提升长字面量可读性
类型后缀与注意事项
字面量默认是 int 类型;若需 long,必须加 L 或 l(推荐大写 L,避免与数字 1 混淆);byte/short 需强制转换或使用变量初始化上下文推断。
- long big = 0xFFFFFFFFFFFFFFFFL;(正确)
- long bad = 0xFFFFFFFFFFFFFFFF;(超出 int 范围,编译错误)
- byte b = 0b0000_0001;(编译通过,值在 byte 范围内)
- byte c = 0b1000_0000_0000;(超范围且无强制转换,编译失败)










