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 通常会在编辑器中高亮显示合法下划线位置辅助校验
