int server = (Math.abs(q.hashCode()) % solrLoadBalanceNumOfServers) + 1;

Jenkins (Jenkins)警告我:



此代码生成一个哈希码,然后计算该哈希码的绝对值。如果哈希码为Integer.MIN_VALUE,那么结果也将为负(因为Math.abs(Integer.MIN_VALUE) == Integer.MIN_VALUE)。

2 ^ 32个字符串中有一个具有Integer.MIN_VALUE的hashCode,包括“polygenelubricants”“GydZG_”和““DESIGNING WORKHOUSES”。

有人知道为什么我会收到此警告以计算绝对值吗?

最佳答案

警告本身说明了为什么收到警告。

您在哈希码上调用Math.abs()。整数从−2,147,483,648变为2,147,483,647。由于最大值为2,147,483,647,因此Math.abs(-2,147,483,648)返回-2,147,483,648,因为没有2,147,483,648。如果您的String哈希码为-2,147,483,648,则server变量将被分配为负值,这可能会导致查询被删除或服务崩溃。

与其那样做,不如先做模,然后调用Math.abs()

int server = Math.abs(q.hashCode() % solrLoadBalanceNumOfServers) + 1;

关于java - 错误尝试计算绝对值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23416264/

10-09 20:51