132

'generateNumber'メソッドが呼び出されるたびに1ずつインクリメントするLongプリミティブ型を使用しています。ロングが上限に達した場合はどうなりますか?例外をスローしますか、それとも最小値にリセットしますか?これが私のサンプルコードです:

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

4 に答える 4

415

Long.MAX_VALUEです9,223,372,036,854,775,807

この情報源によると、関数を1ナノ秒に1回実行した場合でも、この状況に遭遇するまでに292年以上かかります。

それが起こったとき、それはただラップアラウンドするでしょうLong.MIN_VALUE、または-9,223,372,036,854,775,808他の人が言ったように。

于 2013-03-19T16:53:14.203 に答える
46

オーバーフローしてラップアラウンドしLong.MIN_VALUEます。

しかし、その可能性はあまりありません。1秒間に1,000,000回インクリメントしても、オーバーフローするまでに約30万年かかります。

于 2013-03-19T16:47:03.737 に答える
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 に答える
9

longの最大値を超えても例外はスローされず、代わりにシクルバックします。これを行う場合:

Long.MAX_VALUE + 1

結果はLong.MIN_VALUEと同等であることがわかります。

ここから:Java番号がlong.max_valueを超えています-検出方法は?

于 2013-03-19T16:48:29.093 に答える