132

我使用的是 Long 原始类型,每当我的“generateNumber”方法被调用时,它就会递增 1。如果龙达到他的最大极限会发生什么?会抛出任何异常还是会重置为最小值?这是我的示例代码:

class LongTest {
   private static long increment;
   public static long generateNumber(){
       ++increment;
       return increment;
   }
}
4

4 回答 4

415

Long.MAX_VALUE9,223,372,036,854,775,807

如果你每纳秒执行一次你的函数,根据这个来源,遇到这种情况仍然需要超过 292 年。

发生这种情况时,它只会环绕到Long.MIN_VALUE,或者-9,223,372,036,854,775,808像其他人所说的那样。

于 2013-03-19T16:53:14.203 回答
46

它会溢出并环绕到Long.MIN_VALUE.

不过可能性不大。即使每秒增加 1,000,000 次,也需要大约 300,000 年才能溢出。

于 2013-03-19T16:47:03.737 回答
9

超过 long 的最大值不会引发异常,而是会返回。如果你这样做:

Long.MAX_VALUE + 1

您会注意到结果等同于 Long.MIN_VALUE。

从这里开始:java number超过long.max_value - 如何检测?

于 2013-03-19T16:48:29.093 回答
9

范围从 -9,223,372,036,854,775,808 到 +9,223,372,036,854,775,807。

将从 -9,223,372,036,854,775,808 开始

Long.MIN_VALUE.
于 2013-03-19T16:47:17.837 回答