java数值字面量后缀用于明确类型:整数加l/l表示long(避免int溢出),浮点数加f/f表示float、d/d表示double(防止精度丢失);后缀须紧贴数字,无short/byte后缀。

Java 中数值类型字面量的后缀用于明确指定字面量的类型,避免编译器按默认规则推断出错误类型(尤其是整数和浮点数),也能防止隐式转换导致的编译错误或精度丢失。
整数字面量后缀:L 或 l(表示 long)
Java 默认把整数字面量(如 123、0xFF)当作 int 类型。若数值超出 int 范围(−2³¹ ~ 2³¹−1),或你明确需要 long 类型,就必须加后缀 L 或 l。
- ✅ 正确写法:
long x = 10000000000L; // 100亿,超 int 范围,必须加 L long y = 0x1FAL; // 十六进制 long 字面量 long z = 123_456_789_012L; // 支持下划线,L 不可省略
- ❌ 错误写法:
long w = 10000000000; // 编译错误:integer number too large
⚠️ 推荐用大写
L,因为小写l和数字1容易混淆(例如1l看起来像11)。
浮点字面量后缀:F/f(表示 float)、D/d(表示 double)
Java 默认把带小数点的字面量(如 3.14)当作 double 类型。若要声明 float 变量并直接赋值,必须加 F 或 f;double 后缀 D/d 可省略(但允许写)。
- ✅ 正确写法:
float a = 3.14f; // 必须加 f,否则编译报错:possible loss of precision float b = 1.0e-5F; double c = 2.71828d; // d 可加可不加,效果同 2.71828 double d = 1.23E+4; // 默认就是 double,无需后缀
- ❌ 错误写法:
float e = 3.14; // 编译错误:incompatible types: possible loss of precision
?
float是单精度(32位),double是双精度(64位)。除非有内存或性能约束,一般优先用double。
其他注意事项
- 后缀必须紧贴数字末尾,中间不能有空格或下划线:
long ok = 100L; long error = 100 L; // 编译错误 long alsoError = 100_L; // 编译错误(下划线不能在后缀前)
- 八进制(
0开头)、十六进制(0x/0X)、二进制(0b/0B)字面量也支持L/l:long oct = 0123L; // 八进制 83(十进制) long hex = 0xFFL; // 十六进制 255 long bin = 0b1010L; // 二进制 10
- 没有
short或byte字面量后缀 —— Java 不支持。小整数需靠强制类型转换或编译器自动缩小转换(仅限常量表达式且值在范围内):byte b = 100; // ✅ 编译通过(常量 100 在 byte 范围内) byte c = (byte)200; // ✅ 强转(非常量需显式) // byte d = 300; // ❌ 编译错误:type mismatch
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











