ITPub博客

首页 > 应用开发 > Java > 在Java中,负数的绝对值竟然不一定是正数!!!

在Java中,负数的绝对值竟然不一定是正数!!!

Java 作者:喝水会长肉 时间:2021-12-14 15:26:33 0 删除 编辑

绝对值是指一个数在数轴上所对应点到原点的距离,所以,在数学领域,正数的绝对值是这个数本身,负数的绝对值应该是他的相反数。

这几乎是每个人都知道的。

在Java中,想要获得有个数字的绝对值,可以使用 java.lang.Math中的 abs方法,这个类共有4个重载的abs方法,分别是:


public 
static int 
abs
(
int a
) 
{

    return (a < 0 ) ? -a : a ;
}

public static long abs ( long a ) {
    return (a < 0 ) ? -a : a ;
}
//java学习交流:737251827  进入可领取学习资源及对十年开发经验大佬提问,免费解答!
public static float abs ( float a ) {
    return (a <= 0.0F ) ? 0.0F - a : a ;
}

public static double abs ( double a ) {
    return (a <= 0.0D ) ? 0.0D - a : a ;
}

以上4个方法分别返回int、long、float、double类型的绝对值,方法里面的逻辑也简单, 无非就是整数直接返回,负数取相反数返回。

所以,基于以上所有的知识,我们经常会直接使用 Math.abs来对一个数字取绝对值。

在我们的代码中,也有很多这样的例子。

比如,我们需要用订单号做分库分表,但是订单号是字符串类型,所以,我们就需要取得这个字符换的hashCode,因为 hashCode可能是负数,所以然后再对hashCode取绝对值,再用这个值去对分表数取模:

Math.abs(orderId.hashCode()) % 1024;

但是,上面这个逻辑是有问题的!!!

因为在极特殊情况下,上面的代码会得到一个负数的值。



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70010294/viewspace-2847678/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2021-11-19

  • 博文量
    199
  • 访问量
    86401