问题抛出:
java.lang包中的Math类是个final类,其中有个方法叫abs()是取绝对值的,但我发现了个有趣的地方.
Math.abs(Integer.MIN_VALUE)=-2147483648
怎么样?是不是有种颠覆世界观的感觉?
解析:
首先,我们来看下Integer.MIN_VALUE的二进制:
10000000 00000000 00000000 00000000
其中首位是符号位,后边31位是数值位.
然后,我们来看下Math.abs()的源码:
public final class Math {
public static int abs(int a) {
return (a < 0) ? -a : a;
}
}
源码很简单,就是判断下当前值是不是小于零,如果小于零的话,取当前值的负数.
照这么来看,-Integer.MIN_VALUE应该也是-2147483648,我们来简单验证一下:
public class main {
public static void main(String[] args) {
System.out.println(-Integer.MIN_VALUE);
if (Integer.MIN_VALUE == -Integer.MIN_VALUE) {
System.out.println("ok");
}
}
}
//output
-2147483648
ok
结果跟我们猜想的一样,并且我们能注意到,if条件是成立的,也就是说Integer.MIN_VALUE与-Integer.MIN_