分配long到long类型的最大值会引发异常

时间:2015-07-02 14:52:22

标签: java long-integer

第一行代码不会引发异常,但是第二行(指定long的最大值)会抛出RuntimeException。有人可以澄清这种混乱吗?谢谢。

long val1 = Long.MAX_VALUE;
long val2 = 9223372036854775807;

3 个答案:

答案 0 :(得分:6)

将其更改为

long val2 = 9223372036854775807L;

没有L,它被视为一个int文字,而这个数字对于一个int来说太高了。

答案 1 :(得分:4)

您使用整数字面,需要长文字

long val2 = 9223372036854775807L;

您需要在整数文字的末尾添加“l”或“L”以获得长文字。

long a = 100; // integer literal, good - 'L' adding compiler
long b = 100L; // long literal, good
long c = 10000000000; // integer literal, bad - too large
long d = 10000000000L; // long literal, good

您可以在Oracle Tutorials中阅读有关文字的内容。

答案 2 :(得分:4)

当您在Java中键入数字时,编译器会自动将其读作整数,这就是为什么当您输入(long)9223372036854775807(不在整数范围内)时,它会抱怨9223372036854775807不是整数。

要使其闭嘴,您必须在之后指定带有 L 的9223372036854775807L,以告诉编译器该数字是长文字

可以找到更多信息here,其中在Java文档中讨论了整数文字。

  

如果整数文字以ASCII为后缀,则其长度为long   字母L或l(ell);否则它的类型为int(§4.2.1)。