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)
| 归档时间: |
|
| 查看次数: |
3125 次 |
| 最近记录: |