java中八进制以0开头(仅含0–7),十六进制以0x/0x开头(含0–9、a–f),均默认int型,超范围需加l后缀,支持下划线提升可读性。

Java 中八进制和十六进制数字用特定前缀标识,不加前缀会被当作十进制处理,写错会直接编译失败。
八进制字面量:必须以 0 开头,只能含 0–7
Java 规定,以单个 0 开头的整数字面量即为八进制(注意不是 0o 或 0O,那是 Python 的写法)。数字中不能出现 8 或 9。
-
int x = 012;→ 十进制 10(1×8¹ + 2×8⁰) -
int y = 0777;→ 十进制 511 -
int z = 08;→ 编译错误:八进制不允许数字 8 -
int zero = 00;→ 合法,表示十进制 0
十六进制字面量:必须以 0x 或 0X 开头,支持 0–9 和 a–f(不区分大小写)
前缀中的 0 是数字零,不是字母 O;x 不区分大小写,字母 a–f 可大写可小写。
-
int h1 = 0xFF;→ 十进制 255 -
long h2 = 0XdeadC0deL;→ 合法,支持大小写混用和 L 后缀 -
short s = 0x00FF;→ 值在 short 范围内,编译通过 -
int bad = 0xG1;→ 编译错误:G 不是合法十六进制字符
类型与后缀要注意
所有进制字面量默认是 int 类型。超出 int 范围或需 long 类型时,必须显式加 L(推荐大写,避免和数字 1 混淆);赋给 byte、short 等小类型时,值必须在其范围内,否则需强制转换。
-
long big = 0xFFFFFFFFFFFFFFFFL;→ 正确 -
long wrong = 0xFFFFFFFFFFFFFFFF;→ 编译失败:超 int 范围且无 L -
byte b = 0b0000_0001;→ 合法(二进制也适用同规则) -
byte c = 0x100;→ 编译失败:256 超出 byte 范围(−128 ~ 127)
可读性增强:支持下划线分隔
从 Java 7 起,所有进制字面量都允许在数字间插入下划线 _,仅用于提升可读性,编译时被忽略。
int mask = 0b1111_0000_1111_0000;int addr = 0xFF_FF_FF_FF;int oct = 0_777_000;
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











