Java 7起支持数值字面量中用下划线分隔数字以提升可读性,但下划线只能位于数字之间,不可在开头、结尾、小数点旁、进制前缀或类型后缀旁,不可连续出现,且编译时被忽略,无运行时开销。

Java 7 开始支持在数值字面量中使用下划线(_)来分隔数字,提升长数字的可读性,但必须遵守明确的语法规范,否则编译报错。
下划线只能出现在数字之间
下划线不能出现在数值的开头、结尾,也不能紧邻小数点、进制前缀(如 0x、0b)或浮点类型后缀(如 F、L)。
- ✅ 正确:int million = 1_000_000;、long hex = 0xFF_FF_FF_FFL;、double pi = 3.141_592_6;
- ❌ 错误:int x = _100;(开头)、int y = 100_;(结尾)、double z = 3._14;(紧邻小数点)、long w = 0x_F;(紧邻前缀)
支持所有基本数值类型字面量
整型(十进制、十六进制、八进制、二进制)、浮点型(float、double)均允许使用下划线,但需符合各自字面量规则。
- 二进制:int mask = 0b1100_1010_0001_1111;
- 十六进制:long addr = 0x7fff_ffff_ffff_ffffL;
- 科学计数法:double d = 6.022_140_76e23;(下划线可放在系数或指数中,但不能在 e 或 E 旁边)
多个连续下划线不合法
Java 不允许两个及以上连续下划线,也不允许下划线单独成段。每个下划线必须严格位于两个数字字符之间。
立即学习“Java免费学习笔记(深入)”;
- ✅ 正确:long n = 1_2_3_4_5;
- ❌ 错误:long m = 1__2;、long p = 1_ _2;、long q = 1_______2;
编译期处理,运行时无开销
下划线纯粹是源码层面的语法糖,编译器会直接忽略所有下划线,生成的字节码与未加下划线的字面量完全一致,不影响性能和内存布局。
- 例如:int a = 1_000_000; 和 int b = 1000000; 编译后等价
- 调试时变量值显示也不含下划线,IDE 通常会在编辑器中高亮显示合法下划线位置辅助校验








