在java中Math.abs(-2147483648) =-2147483648.这个奇怪的结果就是整数溢出的典型例子.
java中int类型数据为32位,取值范围为232-1~-232(之所以最大值为232-1是因为0的存在).
-232=-2147483648
Math.abs源码:
public static int abs(int a) {
return (a < 0) ? -a : a;
}
-2147483648的绝对值应该是2147483648,但是int类型最大值就是232-1为2147483647,在模系统中最大值再加一会变成最小值,如同时钟的模为12,最大值12再加一变成了1,是一个首尾相接的循环.
总之在java中使用10亿以上数字时请使用long类型,可以有效避免整数溢出
转自 https://blog.csdn.net/a755199443/article/details/89109348