在长变量声明中使用字母L.

long l2 = 32; 

当我使用上面的语句时,我没有收到错误(我最后没有使用l ),但是当我使用下面的语句时,我收到此错误:

int类型的文字3244444444超出范围

 long l2 = 3244444444; 

如果我用long l2 = 3244444444l; ,那就没有错误。

这是什么原因? 对于长变量,使用l不是必需的。

3244444444被解释为文字整数但不能适合32位的int变量。 它需要是一个字面长值 ,所以它最后需要一个lL

 long l2 = 3244444444l; // or 3244444444L 

更多信息:

  • 原始数据类型 ,特别是默认值文字部分。

请注意,虽然在分配给long变量时int literals将自动加宽为long,但在表达值时需要使用显式long文字。

  1. 大于Integer.MAX_VALUE (2147483647)

    (要么)

  2. 小于Integer.MIN_VALUE (-2147483648)

     long x1 = 12; //OK long x2 = 2147483648; // not OK! That's not a valid int literal long x3 = 2147483648L; // OK