数値の絶対値を得たい場合、Math.absメソッドを使う方法と、自前で「負の数であれば符号を逆転する」方法がありますが、実はJavaでは「そのどちらを用いても」結果が必ず正の数になるとは限りません。 具体的には、int型およびlong型の最小値の絶対値を得ようとした場合で、下図のとおり、Math.absメソッドを用いても、符号を逆転しても、元の値が返ってきますので「絶対値を取ったはずが、負の数が返ってくる」となります。 これは、int型の最大値(2,147,483,647)が、最小値(-2,147,483,648)の絶対値よりも、1小さいことが原因であり、long型、short型、byte型の場合も同様です。 Javaではこのことへの対処として、例外を発生させたり、範囲外を示すビットパターンを返したりせずに、そのままの値を返すことを明文化しているわけです。 なお、実数においてはこの現象は起
![整数の絶対値は常に正の数になるとは限らない](https://cdn-ak-scissors.b.st-hatena.com/image/square/1c0e0437dd0413ffb597ae9d87be511d9f9afb7d/height=288;version=1;width=512/https%3A%2F%2Fimage.itmedia.co.jp%2Fait%2Farticles%2F0611%2F01%2Fr20_161-1.gif)