内存地址和Java HashCode [duplicate]有什么区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存地址和Java HashCode [duplicate]有什么区别相关的知识,希望对你有一定的参考价值。

即使您有两个具有相同值的不同字符串,它们也将具有相同的哈希码。在下面的示例中,HashCode是相同的吗?但是内存地址是一样的吗?我如何在Java中获得它。
jshell> var a = new String(“ Ranga”)

a ==>“范围”

jshell> var b =新的String(“ Ranga”)

b ==>“ Ranga”

jshell> a.hashCode()

$ 31 ==> 78727449

jshell> b.hashCode()

$ 32 ==> 78727449

jshell> a == b

$ 33 ==>假

答案
如果要在更改字符串之前查看字符串的原始hashCode,可以执行以下操作:

String foo = ...some string System.out.println(System.identityHashCode(foo));

根据hashCode的文档

在合理可行的范围内,由Object类定义的hashCode方法确实为不同的对象返回不同的整数。 (通常通过将对象的内部地址转换为整数来实现,但是Java™编程语言不需要此实现技术。)

以上是关于内存地址和Java HashCode [duplicate]有什么区别的主要内容,如果未能解决你的问题,请参考以下文章

java中“==”和equals()以及hashCode()的理解

java中“==”和equals()以及hashCode()的理解

Java双等号,Equals(),HashCode()小结

美团一面:hashCode 和对象的内存地址有什么关系?我懵了。。

Java为什么要同时重写equals和hashcode

某团面试题:hashCode 的值是怎么生成的?对象内存地址吗?