hashCode作为JDK 8中的对象引用

时间:2014-09-05 18:34:44

标签: java hashcode object-reference

据我所知,jdk 8 now正在为hashCode分配对象的内存地址。

并且obj1 = obj2如果obj1obj2则返回true,即它们位于相同的内存位置。

但是,以下代码执行“else”部分 - 而不是if-stat的“then”部分,这是我所期望的:

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。

2 个答案:

答案 0 :(得分:0)

String类会覆盖hashCode()

答案 1 :(得分:0)

h1h2未位于同一内存位置。您正在调用new String("heya"),因此JVM将创建String的新实例。因此,h1 == h2是错误的。 hasCode是相同的,因为它基于组成char的{​​{1}}。 使用String方法代替equals将返回==