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