You need to enable JavaScript to run this app. Java中声明long类型时省略l/L后缀的影响与变量类型判定
优惠活动
大模型
产品
解决方案
定价
更多

Java中声明long类型时省略l/L后缀的影响与变量类型判定

Java long类型省略l/L后缀的实际规则

核心问题解答

针对对应测试代码里的两个疑问,结合Java语言规范的实际行为说明如下:

1. l3 变量的类型归属

l3 变量的实际类型是 long,不存在是int类型的情况。
Java中变量的类型由声明语句直接决定,和赋值表达式的自身类型没有关系。这里只是赋值右侧的100这个不带后缀的整数字面量,本身的默认类型是int,而非long。

2. 省略l/L后缀的执行效果

省略后缀的执行结果分两种场景,完全取决于不带后缀的整数值是否落在int类型的取值范围内(即-2³¹ ~ 2³¹-1):

  • 当整数值在int合法取值范围内(比如示例中的100):Java会执行隐式自动类型转换,把原本int类型的数值转换为long类型后再完成赋值。整个过程编译无报错、运行无异常,和加了L后缀的执行结果没有实际区别。
  • 当整数值超出int的合法取值范围:哪怕把这个值赋值给long类型的变量,也会直接触发编译报错。因为不带后缀的整数会首先被按int类型做语法解析,超出int范围的数值根本无法通过解析校验,完全走不到后续转换为long的步骤。比如写long bigValue = 9999999999; 这行代码,因为数值超出int范围又没加L后缀,编译器会直接抛出“integer number too large”的编译错误。

补充说明

  • 日常编码中更推荐使用大写L作为后缀,避免小写l和数字1视觉混淆,比如100l很容易被误看成1001,降低代码可读性。
  • 对应测试代码的实际编译表现:
long l1 = 100l; // 右侧字面量为long类型,无隐式转换
long l2 = 100L; // 右侧字面量为long类型,无隐式转换
long l3 = 100;  // 右侧字面量为int类型,自动转long后赋值,编译通过

内容的提问来源于stack exchange,提问作者mrbela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 09:06:06