2014-09-05 33 views
0

從我所知道的,jdk 8 now被分配爲hashCode對象的內存地址。hashCode作爲JDK 8中的對象ref

而且,如果obj1obj2,則obj1 = obj2返回true,即它們坐在相同的存儲位置。

但是,下面的代碼執行的「其他」 part--不是IF-STAT的「然後」的一部分而這正是我期望:

String h1 = "heya"; 
String h2 = new String ("heya"); 
System.out.println("hashCodes "+h1.hashCode()+" "+h2.hashCode()); 

if (h1 == h2) 
     System.out.println("yeah - the same "); 
else System.out.println("nope-- difft objects "); 

缺少什麼我在這裏?

TIA。

+0

@Aeshang - 這是另一個問題 - 他們對我來說也是這樣,但我會想知道一旦我通過這個。你說的是實例化一個新的字符串旁路實習該值,我同意。但是,運行n請參閱上面代碼中的hashCode值。 – user3880721 2014-09-05 18:38:25

+1

'String'!='Object'。不同的'hashCode'實現。 – 2014-09-05 18:38:38

+1

本教程具有誤導性。 'hashCode'不需要與內存地址有關。 – fgb 2014-09-05 18:46:19

回答

0

h1h2不坐在相同的存儲位置。您正在調用new String("heya"),以便JVM將創建String的新實例。因此,h1 == h2是錯誤的。 hasCode是相同的,因爲它基於構成Stringchar。 使用equals方法代替==將返回true

+0

forgotton abt實現自己的hashCde的字符串。當它允許時會接受你的答案。 – user3880721 2014-09-05 18:42:52