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/