❤ 作者主页:李奕赫揍小邰的博客
❀ 个人介绍:大家好,我是李奕赫!( ̄▽ ̄)~*
🍊 记得点赞、收藏、评论⭐️⭐️⭐️
📣 认真学习!!!🎉🎉
根据UUID取hash值+随机数,产生命令唯一标识
大部分写法都是一下情况
/**
* 根据UUID取hash值+随机数,产生命令唯一标识
*
* @throws InterruptedException
*/
public static String getOrderSeq() {
String orderSeq = Math.abs(UUID.randomUUID().toString().hashCode()) + "";
while (orderSeq.length() < 16) {
orderSeq = orderSeq + (int) (Math.random() * 10);
}
return orderSeq;
}
但真的没有问题吗?当我们使用sonar扫描的时候,他就会报错不应该对hashcode使用绝对值。
为什么hashcode不能取绝对值?
hashcode的取值范围是Integer.MIN.VALUE——Integer.MAX.VALUE
hashcode取绝对值是不可行的,取值范围是-231——231-1,当负数取绝对值后,其数值大于hashcode的最大值,所以如果最小值取绝对值就越界了。
修改方法!
那我们该如何修改呢
int uuid = UUID.randomUUID().toString().hashCode();
while(uuid==Integer.MIN_VALUE){
uuid = UUID.randomUUID().toString().hashCode();
}
StringBuilder orderSeq = new StringBuilder(Math.abs(uuid) + "");
这样的话,sonar扫描后就不会报异常