Java Long原始类型最大限制

use*_*156 110 java

我正在使用Long基元类型,每当我的'generateNumber'method调用时,它就会递增1.如果Long达到他的最大限制会发生什么?会抛出任何异常还是会重置为最小值?这是我的示例代码:

class LongTest {
   private static long increment;
   public static long generateNumber(){
       ++increment;
       return increment;
   }
}
Run Code Online (Sandbox Code Playgroud)

Kre*_*ase 358

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

如果您每纳秒执行一次函数,根据此来源,遇到这种情况仍需要292年.

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

  • 这是一个地狱之源. (258认同)
  • 至少有一个很好的机会,源不会过期. (46认同)
  • 我喜欢这个来源!! (6认同)
  • 9223372036854775807 不带逗号给像我这样想抄号的人 (4认同)
  • [独立来源](http://www.wolframalpha.com/input/?i=9,223,372,036,854,775,807+nanoseconds+in+years);-) (3认同)
  • @matthew.kempson - 我希望没有人需要在代码中引用原始数字!静态常量存在,所以没有人需要这样引用它。 (3认同)
  • 2.92亿*年 (2认同)

Zut*_*tty 44

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

虽然不太可能.即使你每秒增加1,000,000次,也需要大约30万年才能溢出.

  • "即使你每秒增加1,000,000次,也需要大约30万年的时间才能溢出." NICE! (16认同)

Aja*_*y S 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.
Run Code Online (Sandbox Code Playgroud)


jse*_*ano 9

超过long的最大值并不会抛出异常,而是会反过来.如果你这样做:

Long.MAX_VALUE + 1
Run Code Online (Sandbox Code Playgroud)

你会注意到结果相当于Long.MIN_VALUE.

从这里:java数量超过long.max_value - 如何检测?