You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中int x=100L与long x=100的写法存在差异吗?

关于Java中int字面量加L后缀与直接声明long变量的差异

首先得明确说:你举的两个例子完全不等价,甚至第一行代码根本无法通过编译。下面我来拆解其中的逻辑,帮你理清楚这里的区别:

1. 字面量后缀L的本质

给整数字面量加L(小写l也支持,但容易和数字1混淆,推荐用大写),是明确告诉编译器:这个字面量的类型是long,而非Java默认的int类型。Java里整数字面量默认是int,范围是-2^31到2^31-1,如果字面量超出这个范围,必须加L声明为long,否则会直接编译报错。

2. 你的两个代码示例分析

  • int x = 100L;:编译错误
    这里你试图把一个long类型的字面量赋值给int类型变量。Java是强类型语言,从大范围类型(long)向小范围类型(int)赋值属于窄化转换,这种转换可能丢失精度,编译器不会自动执行,必须显式强制转换才行——比如改成int x = (int)100L;才能通过编译。
  • long x = 100;:合法且正常运行
    这里是把默认int类型的字面量100赋值给long类型变量。因为int的范围完全包含在long的范围内(long范围是-2^63到2^63-1),这种从小范围类型向大范围类型的赋值属于宽化转换,编译器会自动完成,不会有任何问题。

3. 真正等价的写法

如果要找和long x = 100;等价的代码,应该是long x = 100L;——这两行代码运行时效果完全一致:100作为int字面量会被自动提升为long,100L则直接是long字面量,最终变量x的类型和值没有任何区别。

4. 什么时候必须用L后缀?

当你需要表示的整数超出int的范围时,必须加L。比如long x = 2147483648;会编译报错(2147483648是int最大值+1,超出int范围),而long x = 2147483648L;就完全合法。另外在方法重载场景中,加L后缀能确保调用的是接收long参数的重载方法,避免类型歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:30:34