计算绝对值的不良尝试

Sam*_*and 6 java jenkins

        int server = (Math.abs(q.hashCode()) % solrLoadBalanceNumOfServers) + 1;
Run Code Online (Sandbox Code Playgroud)

詹金斯警告我这个说明:

尝试计算带符号的32位哈希码的绝对值

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

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

有谁知道为什么我得到这个计算绝对值的警告?

mat*_*rod 13

警告本身解释了为什么你收到警告.

你正在调用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;
Run Code Online (Sandbox Code Playgroud)