Java中long字面量必须加L后缀(推荐大写),否则默认为int;支持下划线分隔(Java 7+)提升可读性,但禁止出现在开头、结尾或连续使用;还支持八进制、十六进制、二进制写法,均需加L。

Java 中 long 类型字面量必须显式标明类型,否则编译器默认按 int 处理,超出 int 范围就会报错。核心就两点:加后缀、用下划线提升可读性(可选但推荐)。
必须加 L 后缀(大写更安全)
整数字面量不带后缀时,哪怕数值本身在 long 范围内,只要超过 int 最大值(2147483647)或小于最小值(-2147483648),就必须加 L:
-
long ts = 1718700000000L;✅ 正确(时间戳常用) -
long id = 9223372036854775807L;✅ 正确(Long.MAX_VALUE) -
long x = 9223372036854775807;❌ 编译失败(缺L,被当int解析) -
long y = 10000000000l;⚠️ 语法合法但不推荐(小写l易与数字1混淆)
支持下划线分隔(Java 7+)
下划线纯属源码级辅助,编译后完全消失,不影响运行时行为,但能显著提升长数字的可读性:
- 十进制按千位分组:
long size = 1_234_567_890_123L; - 十六进制按字节分组:
long mask = 0xFF00_FF00_FF00_FF00L; - 二进制每 4 位一组:
long flags = 0b1100_1010_0001_1111L; - ❌ 禁止位置:开头
_1000L、结尾1000_L、紧贴0x或L(如0x_FFL、1000_L)、连续多个下划线1__000L
支持多种进制写法
long 字面量不限于十进制,还可直接用八进制、十六进制、二进制表示,但都需加 L:
- 八进制(以
0开头):long oct = 01234567L;(对应十进制 342391) - 十六进制(以
0x或0X开头):long hex = 0xFF00_00FFL; - 二进制(以
0b或0B开头):long bin = 0b1010_1100_1101_1110L;
常见误区提醒
这些写法看似合理,实际会触发编译错误或隐含风险:
-
float f = 3.14;和long l = 10000000000;是同类问题——都因缺少类型后缀导致类型推断失败 - 即使数值没超
int范围,加L也完全合法,比如long count = 42L;更清晰表达意图 - IDE 通常会高亮非法下划线位置,建议开启语法检查并依赖该提示快速验证
- 构建配置中若设
-target 6等低版本字节码,下划线特性将被禁用,需确保 JDK ≥ 7 且 target 兼容
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











