我尝试运行此代码,但发生错误。

System.out.println(Long.parseLong("9000000000000000", 16));
我们知道long的最小数量是-9,223,372,036,854,775,808,而0x9000000000000000是-8,070,450,532,247,928,832,为什么会发生错误?

最佳答案

9000000000000000以16为底的正数,因为没有符号。由于long已签名,因此它可以容纳的最大数字为0x7FFF_FFFF_FFFF_FFFF。所以你太厉害了。
如果您想要-8,070,450,532,247,928,832,请使用parseUnsignedLong():

        System.out.println(Long.parseUnsignedLong("9000000000000000", 16));
输出:

现在接受的值最大为0xFFFF_FFFF_FFFF_FFFF。

10-06 13:49