java 7起支持数字字面量中用下划线分隔以提升可读性,下划线仅允许出现在数字之间,不可在开头、结尾、小数点旁、进制前缀或类型后缀前,适用于所有基本数字类型及各进制。

Java 从 7 开始支持在数字字面量中使用下划线(_)作为分隔符,主要用于提升长数字的可读性,比如金额、位掩码、大整数或浮点数。下划线本身不参与计算,编译时会被直接忽略。
哪些位置可以加下划线?
下划线只能出现在数字之间,不能出现在开头、结尾,也不能紧邻小数点、进制前缀(如 0x、0b)或 L/F/D 等类型后缀之前。
- ✅ 合法:
int million = 1_000_000;、long mask = 0xFF_FF_FF_00L;、double pi = 3.141_592_653_5; - ❌ 非法:
int x = _100;、int y = 100_;、double z = 3._14;、int b = 0x_F;、long l = 100_L;
支持的数字类型和进制
下划线可用于所有基本数字类型字面量:
- 十进制整数:
int a = 1_234_567; - 二进制(需
0b前缀):int flag = 0b1101_0010_1011_0001; - 十六进制(需
0x前缀):int color = 0xFF_3B_82_E3; - 八进制(需
0前缀):int oct = 0123_456;(注意:Java 8+ 已不推荐用前导 0 表示八进制,建议改用0o前缀,但下划线仍可用) - 浮点数字面量:
float f = 123_456.789_012f;、double d = 1.234_567_890_123_456_7e10;
实际编码建议
合理使用下划线能显著提升代码可维护性,尤其在处理时间戳、内存大小、网络协议字段等场景:
- 按千位分组(十进制):
long bytes = 2_147_483_647L; - 按字节分组(十六进制/二进制):
int header = 0x80_00_00_00;、byte status = (byte)0b1010_0001; - 金额或精度控制:
BigDecimal price = new BigDecimal("999_999.99");(注意:字符串构造器不识别下划线,仅字面量支持) - 避免过度使用:不要写成
1______000或1_0_0_0,应保持语义清晰、分组一致
下划线是纯粹的语法糖,不影响运行时行为,也不改变数值本身。只要符合规则,JVM 会无缝处理。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











