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。如果允许,我们将接受您的答复。