第一行代码不会引发异常,但是第二行(指定long的最大值)会抛出RuntimeException。有人可以澄清这种混乱吗?谢谢。
long val1 = Long.MAX_VALUE;
long val2 = 9223372036854775807;
答案 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)。