Math.abs()竟然返回了负数?

  Java   4分钟   307浏览   0评论

Math.abs()

相信大家都听过Math.abs()方法,就是取一个数的绝对值

以下是Math.abs()的源码

我们来测试一下

package test;

/**
 * @author: 邹祥发
 * @date: 2021/11/4 15:36
 */
public class Test03 {
    public static void main(String[] args) {
        System.out.println(Math.abs(100));
        System.out.println(Math.abs(-100));
    }
}

正如我们所料,无论正数还是负数,结果返回的都是一个正数

那么,事实真的如此吗?

package test;

/**
 * @author: 邹祥发
 * @date: 2021/11/4 15:36
 */
public class Test03 {
    public static void main(String[] args) {
        System.out.println(Math.abs(Integer.MIN_VALUE));
    }
}

纳尼???Math.abs()居然返回了一个负数??

再次查看Math.abs()源码

源码上方的注释写着:如果参数等于Integer.MIN_value(最负的可表示int值)的值,则结果是相同的值,即负值。

但是.......为什么是这样呢?

想要知道为什么Math.abs(Integer.MIN_VALUE)返回的是一个负值,我们首先要知道Integer的取值范围。

package test;

/**
 * @author: 邹祥发
 * @date: 2021/11/4 15:36
 */
public class Test03 {
    public static void main(String[] args) {
        System.out.println("Math.abs(Integer.MIN_VALUE):" + Math.abs(Integer.MIN_VALUE));
        System.out.println("Integer最小值:" + Integer.MIN_VALUE);
        System.out.println("Integer最大值:" + Integer.MAX_VALUE);
    }
}

好家伙,这下全明白了。

总结

因为Integer的取值范围为 -2147483648~2147483647,而Math.abs(Integer.MIN_VALUE)相当于 -(-2147483648) =2147483648

Integer所能表示的最大正数2147483647,出现了溢出,所以Math.abs(Integer.MIN_VALUE)返回了一个负值

如果你觉得文章对你有帮助,那就请作者喝杯咖啡吧☕
微信
支付宝
  0 条评论