long l2 = 32;
当我使用上面的语句时,我没有得到错误(我最后没有使用l
),但是当我使用下面的语句时,我得到了这个错误:
int 类型的文字 3244444444 超出范围
long l2 = 3244444444;
如果我使用long l2 = 3244444444l;
,则没有错误。
这是什么原因?对于长变量,使用 l 不是强制性的。
long l2 = 32;
当我使用上面的语句时,我没有得到错误(我最后没有使用l
),但是当我使用下面的语句时,我得到了这个错误:
int 类型的文字 3244444444 超出范围
long l2 = 3244444444;
如果我使用long l2 = 3244444444l;
,则没有错误。
这是什么原因?对于长变量,使用 l 不是强制性的。
3244444444
被解释为文字整数,但不适合 32 位int
变量。它需要是一个文字 long value,所以它需要一个l
or L
:
long l2 = 3244444444l; // or 3244444444L
更多信息:
请注意,虽然 int 字面量在分配给 long 变量时会自动加宽为 long,但在表达一个值时需要使用显式的 long 字面量
比...更棒Integer.MAX_VALUE (2147483647)
(或者)
小于Integer.MIN_VALUE (-2147483648)
:
long x1 = 12; //OK
long x2 = 2147483648; // not OK! That's not a valid int literal
long x3 = 2147483648L; // OK