为什么 kotlin 不接受文字“-9223372036854775808”(最小 64 位有符号整数)?

Why the literal "-9223372036854775808" (min 64 bit signed integer) is not accepted by kotlin?

我正在尝试在 kotlin 中为 JVM 编写一个快速 json 解析器。

我发现了这个问题,我不确定这是一个错误还是背后的任何充分理由。

val x: Long = -9223372036854775808L  // compile error

这被标记为 kotlin 中的错误 KT-17172

您可以使用以下代码看到标准库:

public const val MIN_VALUE: Long = -9223372036854775807L - 1L

你还记得 kotlin 中的一元运算符 - 吗?如果将 MIN_VALUE 分成特殊的部分,您可能会清楚地看到它。例如:

val x: Long = -(9223372036854775808L);
//              ^--- the value overflow since the MAX_VALUE is 9223372036854775807L