2015-06-16 74 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整除。//

相關問題