java解惑你知多少(二)
//?-2147483648??
上面的程序不会输出2147483648,而是-2147483648,为什么?
?
其实我们看一下Math.abs源码就知道为什么了,源码:(a < 0) ? -a : a;,结合上面那个迷题,我们就发现-Integer.MIN_VALUE= Integer.MIN_VALUE,所以上面的答案就是最小整数自己。
?
另外我们也可以从API文档看到对Math.abs()方法的解释:如果参数等于 Integer.MIN_VALUE 的值(即能够表示的最
小负 int 值),则结果与该值相同且为负。
?
所以Math.abs不能保证一定会返回非负结果。
?
当然,Long.MIN_VALUE也是这样的。