不同机器中字符串的哈希码 returns 相同的值

Hashcode for string in different machine returns same value

我已经在 J​​VM 实例中读取了该哈希码 returns 相同的值。但在另一个 JVM 实例中,可能不会返回相同的值。 我尝试了以下程序:

public class demo {
  public static void main(String[] args) {
    String s = new String("Hello");
    System.out.println(s.hashCode());
 }
}

这个程序 returns 与我在我的机器上重新运行它的次数相同。此外,我在其他机器上尝试了 运行 相同的程序,并且在任何地方我都得到了相同的值。是巧合吗?

我有一个场景,我将根据字符串值确定要遵循的下一个业务逻辑。所以目前我在做

switch(s.hashcode()%4){
      case 0:....
      case 1:....
}

这应该总是工作正常吗?

hashCode 在运行中是否相同(是否确定性)取决于class。例如,String 具有确定性的 hashCode;对象没有。通常,您不应期望 hashCode 是确定性的。

此外,hashCode 也不是随机的。例如,对象的 hashCode 就是对象的内存地址,它可能总是能被 4//

整除