【发布时间】:2020-03-08 08:11:22
【问题描述】:
我一直在探索 Java 如何处理整数溢出和下溢,我遇到了这两种情况:
如果将超出范围的值直接分配给 int,则可能没有回绕,这取决于转换:
long tooBigLong=2147483648L;
int integerL=(int)tooBigLong;
double tooBigDouble=Math.pow(2, 31);
int integerD=(int)tooBigDouble;
结果:
Converted from Long to int: -2147483648
Converted from Double to int: 2147483647
似乎只有当我从 Long 转换为 int 时才会发生整数环绕。
但我确实想弄清楚它对于 double 到 int 的转换是如何不起作用的? 谢谢您的帮助!
【问题讨论】:
-
“但我确实想弄清楚它如何不能用于 double 到 int 的转换?”因为语言规范是这么说的。这足以令人满意吗?
-
那么就足够了。谢谢:)
-
如果您愿意,我可以推测一下为什么会这样设计,但出于真正的原因,您必须询问语言团队。
-
我刚刚发现,如果我放弃 Math.pow 并为双精度分配一个 Integer.MAX_VALUE,我会得到一个环绕......我想你是对的,这无法解释无需询问语言开发者!
-
等等你做了什么?
标签: java type-conversion integer integer-overflow