首页 > 应用开发 > Java > 在Java中,负数的绝对值竟然不一定是正数!!!
绝对值是指一个数在数轴上所对应点到原点的距离,所以,在数学领域,正数的绝对值是这个数本身,负数的绝对值应该是他的相反数。
这几乎是每个人都知道的。
在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/ ,如需转载,请注明出处,否则将追究法律责任。