我正在查看一些类似的代码:
public int someMethod(String path, int maxCallers) {
int hash = path.hashCode();
int caller = (hash & Integer.MAX_VALUE) % maxCallers;
return caller;
}
此方法根据路径返回要调用的调用方。如果maxCallers
值为4,则调用者值应在0-3之间。现在我不明白做hash & Integer.MAX_VALUE
的用法。我能想到的一个原因是程序员想要一个正数,因为哈希码可能是负数,但我认为我的理解在这里是错误的。有人可以在这里解释按位AND运算符的使用。
答案 0 :(得分:0)
你的假设是正确的。如果散列为负,则删除整数的符号。使用AND
Integer.MAX_VALUE
将从整数中删除符号位。请注意,这与获取整数的绝对值不同:
int hash = -1;
int caller = (hash & Integer.MAX_VALUE) % 4; // returns 3
int hash = -1;
int caller = Math.abs(hash) % 4; // returns 1