Java Long.MAX_VALUE属性抛出"整数过大"异常!包括"L"

Mei*_*. I 0 java primitive

我正在使用Java SE开发工具包8更新25(64位).我已经阅读了The Java™Tutorials中的"原始数据类型"Java教程,根据此规范,long类型可以保持最大值(2到64的功率)-1,即18446744073709551615.

但是下面的代码会抛出"整数太大"错误消息.

public class SampleClass
{
    public static void main (String[] args)
    {        
        Long longMaxValue= 18446744073709551615L /* UInt64.MaxValue */;
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,Long.Max_Value仅返回9223372036854775807.为什么?我需要将值18,446,744,073,709,551,615存储为java中的常量.我该怎么办?

任何帮助都会得到满足.

Era*_*ran 8

long的最大正值是(2到63的幂) - 1,因为Java中的长整数是有符号的,因此可以保持负整数.最左边的位保留给符号,该值为值本身留下63位.

你可以使用BigIntegerif Long.MAX_VALUE不够大.

另一个选择,如果您使用Java 8并希望将其long视为无符号,则使用以下的unsigned方法Long:

例如 :

long l = parseUnsignedLong("18446744073709551615");
Run Code Online (Sandbox Code Playgroud)

如果打印lSystem.out.println(l),你会看到一个负值,但如果你打印Long.toUnsignedString(l)你会看到无符号值.