bugfix> java > 投稿

なぜAPIごとに例外をスローしないのですか?:

Returns the argument incremented by one, throwing an exception if the result overflows an int.

System.out.println(Math.incrementExact(2_147_483_647 + 1));

-2147483647を返します

回答 2 件
  • それはあなたの合格 Integer.MIN_VALUE だからです   Math.incrementExact へ  関数。

    あなたの表現 2_147_483_647 + 1  最初に評価され、オーバーフローするため、結果は -2147483648 になります 。次に、それを Math.incrementExact に渡します 、結果は -2147483647 になります 。

    やりたいことは

    System.out.println(Math.incrementExact(2_147_483_647));
    
    

    これは java.lang.ArithmeticException: integer overflow になります 。

  • あなたが既に 最大値よりも1つ多くありました。 2_147_483_647 + 1  最初に評価されます。

    System.out.println(Math.incrementExact(2_147_483_646 + 1)); を試す

あなたの答え