2015-06-16 41 views
1

我读过JVM实例中的哈希码返回相同的值。但在另一个JVM实例中,可能不会返回相同的值。 我尝试了以下程序:不同机器中字符串的哈希码返回相同的值

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

这个程序返回的次数量很多我重新运行它在我的机器上相同的值。另外,我尝试在其他机器上运行相同的程序,并且每次都获得相同的值。这只是巧合吗?

我有一个基于字符串值的场景,我将确定下一个业务逻辑。所以目前我在做

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

这个工作应该好吗?

+0

哈希码是从您的字符串派生而来的,所以相同的字符串将具有相同的哈希值。这不是巧合。 –

+0

如果java有可能修改版本之间String的hashCode实现的实现,那么可以让两个java实例返回不同的哈希码(如果它们是不同的版本)。我认为他们认为价值不能保证是一样的,并不是说它们保证是不同的。 – hatchet

回答

2

hashCode在运行中是否相同(是否为确定性)取决于类。例如,String具有确定性的hashCode;对象不。一般来说,你不应该期望hashCode是确定性的。

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

相关问题