这个数字属于长期范围,那么为什么我会收到错误消息:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The literal 8751475143 of type int is out of range
这个数字属于长期范围,那么为什么我会收到错误消息:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The literal 8751475143 of type int is out of range
做了
long n = 8751475143L;
L
将使它长字面意思
默认情况下它的int
如果整数文字以 ASCII 字母 L 或 l (ell) 为后缀,则它是 long 类型;否则它是 int 类型(§4.2.1)。后缀 L 是首选,因为字母 l(ell)通常很难与数字 1(一)区分开来。[..]
解析文字时不考虑赋值的目标 - 所以你需要 L 后缀:
long n = 8751475143L;
在大多数情况下 - 也有一些值得注意的例外 - 表达式的类型是在没有太多参考其上下文的情况下确定的。因此,根据JLS 的第 3.10.1 节,整数文字是类型的int
,除非它具有l
orL
后缀,并且类型的整数文字的int
范围当然限于其自身的范围int
。
java 中的所有数字都被视为integer
s,除非您另有说明(或者您使用小数分隔符 - 然后它们被视为float
s)。
所以,如果你写
long i = 1234;
java会将数字1234
作为integer
,并long
为您进行类型转换。
但是,如果您键入:
long n = 8751475143;
Java 不能8751475143
视为integer
,因为它超出了范围。您需要通过在末尾添加“L”来指定您的意思是long
:
long n = 8751475143L;