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

时间:2015-03-09 07:10:25

标签: java primitive

我使用的是Java SE Development Kit 8 update 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 */;
    }
}

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

任何帮助都会得到满足。

1 个答案:

答案 0 :(得分:8)

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

如果BigInteger不够大,您可以使用Long.MAX_VALUE

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

例如:

long l = parseUnsignedLong("18446744073709551615");

如果您使用l打印System.out.println(l),则会看到负值,但如果您打印Long.toUnsignedString(l),则会看到无符号值。