2013-03-19 18 views
86

私は 'generateNumber'メソッドが呼び出されるたびに1ずつインクリメントするLongプリミティブ型を使用しています。ロングが上限に達するとどうなりますか?例外をスローするか、最小値にリセットされますか?それがオーバーフローしてLong.MIN_VALUEにラップアラウンドしますJavaロングプリミティブ型の最大制限

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

かなり大きい範囲 - '8バイトの符号付き(2の補数)。範囲は-9,223,372,036,854,775,808から+ 9,223,372,036,854,775,807までです。http://www.cafeaulait.org/course/week2/02.html – Coffee

+2

最大値に達すると、次に最小値にロールオーバーします。 – Smit

答えて

278

Long.MAX_VALUE9,223,372,036,854,775,807です。

1ナノ秒ごとに関数を実行していた場合、this sourceに従ってこの状況に遭遇するまでには292年以上かかることになります。

これが起こると、Long.MIN_VALUE、または-9,223,372,036,854,775,808にラップアラウンドするだけです。

+201

これは元気です。 – Preston

+28

少なくとも、ソースが期限切れにならない可能性があります。 –

+3

私はソースが好きです! – fareed

37

: は、ここに私のサンプルコードです。

それはあまりありません。毎秒1,000,000回増分しても、オーバーフローするまでに約30万年かかるでしょう。

+15

「1秒間に1,000,000回増分しても、オーバーフローするまでに約30万年かかるでしょう。いいです! – jsedano

7

範囲は-9,223,372,036,854,775,808から+9,223,372,036,854,775,807までです。

それは長いのdoesntの最大値が例外をスローExceding -9,223,372,036,854,775,808

Long.MIN_VALUE.