有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在整数之间使用按位AND运算符的java好处?

我在看一些代码,比如:

public int someMethod(String path, int maxCallers) {

        int hash = path.hashCode();
        int caller = (hash & Integer.MAX_VALUE) % maxCallers;
        return caller;
    }

此方法根据路径返回要调用的调用方。如果maxCallers值为4,则调用者值应在0-3之间。现在我不明白doing hash & Integer.MAX_VALUE的用法。我能想到的一个原因是程序员想要一个正数,因为哈希代码可以是负数,但我认为我的理解是错误的。有人能解释一下按位AND运算符的用法吗


共 (1) 个答案

  1. # 1 楼答案

    你的假设是正确的。如果散列为负数,则删除整数的符号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