不同机器中字符串的哈希码 returns 相同的值
Hashcode for string in different machine returns same value
我已经在 JVM 实例中读取了该哈希码 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//
整除
我已经在 JVM 实例中读取了该哈希码 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//
整除