Java 在JDK 8中作为对象引用的哈希代码

Java 在JDK 8中作为对象引用的哈希代码,java,hashcode,object-reference,Java,Hashcode,Object Reference,据我所知,正在将对象的内存地址赋值为hashCode 当obj1为obj2时,obj1=obj2返回true,即它们位于相同的内存位置 但是,下面的代码执行if stat的“else”部分,而不是我所期望的if stat的“then”部分: String h1 = "heya"; String h2 = new String ("heya"); System.out.println("hashCodes "+h1.hashCode()+" "+h2.hashCode()); if (h1

据我所知,正在将对象的内存地址赋值为
hashCode

obj1
obj2
时,
obj1=obj2
返回true,即它们位于相同的内存位置

但是,下面的代码执行if stat的“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 ");  
我错过了什么


蒂亚

字符串类重写
hashCode()

h1
h2
不在同一内存位置。您正在调用一个
新字符串(“heya”)
,因此JVM将创建一个
字符串的新实例。因此,
h1==h2
为假。
hasCode
是相同的,因为它基于构成
字符串的
char

使用
equals
方法而不是
=
将返回
true

@Aeshang-这是另一个问题——它们对我来说也是如此,但我想知道,一旦我通过了这个测试。你的意思是,实例化一个新的字符串会传递给这个值,我同意。但是,运行n查看上述代码中的hashCode值。
String
!=<代码>对象
。不同的
hashCode
实现。该教程具有误导性
hashCode
不需要与内存地址有任何关系。forgotton abt String实现自己的hashCde。如果允许,我们将接受您的答复。