2014-11-23 51 views
0

在Java中我這樣做:字符串新()的雜湊碼對象表示相同的值

String s1=new String("USA"); 
    String s2 = new String("Canada"); 
    String s3=new String("Canada"); 
    String s4 = new String("Canada"); 
    String s5=new String("Canada"); 

    System.out.println(s1.hashCode());  
    System.out.println(s2.hashCode()); 
    System.out.println(s3.hashCode()); 
    System.out.println(s4.hashCode()); 
    System.out.println(s5.hashCode()); 

    Output : 
    3254818 
    96801 
    96801 
    96801 
    96801 

我的問題:

  1. 即使,的哈希碼S2,S3,S4和s5是一樣的,可以說它們是不同的String對象。 因爲我們使用new()來創建s2-s5對象,所以說s2,s3,s4和s5是不同的對象並且它們在字符串池中不共享它們的字符串值(加拿大)是否正確?

  2. s2-s5的哈希碼值相同。這是純粹的共同發病嗎?

請解釋。

+0

https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html詳細信息請參閱hascode的文檔。 – jilen 2014-11-23 02:49:00

回答

0

這很正常。散列是基於總是具有相同輸出的輸入的算法。它決不是一個隨機生成器。如果你希望它們不同,字符串值應該是唯一的。你也可以在散列中添加一個類似於ID的值,這樣s2就是加拿大,但是當你散列它時,你會散列加拿大-s2。這是一個獨特的字符串,所以你會得到一個獨特的輸出。

+0

所以,它是正確的:s2,s3,s4和s5是所有不同的對象與自己的價值:「加拿大」存儲在堆上的不同位置? – Navchetan 2014-11-23 02:47:39

+0

是的,更好的測試可能是更改s2的值,然後檢查s3的值,您會看到它們不同。 – DAB 2014-11-23 02:48:49

相關問題