gpt4 book ai didi

java - 整数太大 - 编译错误

转载 作者:行者123 更新时间:2023-12-01 07:19:54 29 4
gpt4 key购买 nike

为什么会这样

int a = 2147483648;

导致此错误:

Test.java:3: integer number too large: 2147483648
int a = 2147483648;
^ 1 error

但是这可以在没有编译器错误的情况下工作吗?

int a = Integer.MAX_VALUE + 1;

最佳答案

赋值的目标是 int 类型的变量实际上并不重要,因为以下内容同样无效:

long x = 2147483648; // <-- literal yields "integer too large" error

System.out.println(2147483648); // <-- same issue

问题在于文字本身,没有 L 后缀,其类型为 int。第一个错误中的 x 类型不相关。

根据JLS 3.10.1关于文字:

It is a compile-time error if the decimal literal 2147483648 appears anywhere other than as the operand of the unary minus operator; or if a decimal literal of type int is larger than 2147483648.

这个数字不能分配给 int,即使文字本身的类型是 int 根据规范。但是,在 Integer.MAX_VALUE + 1 的情况下,不会违反此规则。 1 是有效的 intInteger.MAX_VALUE 也是如此,它们的总和按照 15.18.2 环绕。 :

If an integer addition overflows, then the result is the low-order bits of the mathematical sum as represented in some sufficiently large two's-complement format. If overflow occurs, then the sign of the result is not the same as the sign of the mathematical sum of the two operand values.

顺便说一下,请注意以下内容是有效的:

int x = (int)2147483648L;

由于 2147483648L 是一个有效的 long 文字,并且转换会将其截断以适合 int ,在本例中产生与上面的 MAX_VALUE + 1 结果相同的最终值(特别是 -2147483648)。

关于java - 整数太大 - 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42560088/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com