为什么hashcode取绝对值后sonar会报错?

博客讨论了在生成命令唯一标识时,使用UUID的hash值并取绝对值的问题。Sonar扫描提示不应这样做,因为hashcode的绝对值可能会导致越界。博主提出,当hashcode等于Integer.MIN_VALUE时会引发问题,并提供了一种修改方法,即检查是否等于MIN_VALUE,确保不会无限循环。解决方案是通过StringBuilder避免对hashcode取绝对值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

❤ 作者主页:李奕赫揍小邰的博客
❀ 个人介绍:大家好,我是李奕赫!( ̄▽ ̄)~*
🍊 记得点赞、收藏、评论⭐️⭐️⭐️
📣 认真学习!!!🎉🎉


 

根据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扫描后就不会报异常

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李奕赫揍小邰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值