据我所知,jdk 8 now正在为hashCode
分配对象的内存地址。
并且obj1 = obj2
如果obj1
为obj2
则返回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。
答案 0 :(得分:0)
String类会覆盖hashCode()
。
答案 1 :(得分:0)
h1
和h2
未位于同一内存位置。您正在调用new String("heya")
,因此JVM将创建String
的新实例。因此,h1 == h2
是错误的。 hasCode
是相同的,因为它基于组成char
的{{1}}。
使用String
方法代替equals
将返回==
。