内存地址和Java哈希代码有什么区别 即使您有两个具有相同值的不同字符串,它们也将具有相同的哈希代码。 在下面的示例中,哈希代码是否相同?但是内存地址是相同的吗?我如何用java获得它。

内存地址和Java哈希代码有什么区别 即使您有两个具有相同值的不同字符串,它们也将具有相同的哈希代码。 在下面的示例中,哈希代码是否相同?但是内存地址是相同的吗?我如何用java获得它。,java,string,memory-address,Java,String,Memory Address,jshell>var a=新字符串(“Ranga”) a==>“兰加” jshell>var b=新字符串(“Ranga”) b==>“兰加” jshell>a.hashCode() $31==>78727449 jshell>b.hashCode() $32==>78727449 jshell>a==b $33==>false 如果要在更改字符串之前查看其原始哈希代码,可以执行以下操作: stringfoo=…一些字符串 System.out.println(System.identityHa

jshell>var a=新字符串(“Ranga”)

a==>“兰加”

jshell>var b=新字符串(“Ranga”)

b==>“兰加”

jshell>a.hashCode()

$31==>78727449

jshell>b.hashCode()

$32==>78727449

jshell>a==b

$33==>false


如果要在更改字符串之前查看其原始哈希代码,可以执行以下操作:

stringfoo=…一些字符串
System.out.println(System.identityHashCode(foo));
根据
hashCode

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


为什么?你想解决的问题或你想做的事情是什么?考虑Java中的内存地址意味着您已经走错了方向……您无法访问Java中的内存位置。即使你可以,那又有什么用呢?您不能使用它。您应该问自己的问题是,“Java是否有C/C++之类的指针?”然后您就可以自己回答这个问题了。hashCode()!=内存位置。在hotspot的当前实现中,identityHashCode不依赖于内存位置。如果您可以添加一些refer链接,则@JohannesKuhn将非常有用 Even if you have two different strings with the same value, they will have the same hashcode. In the below example HashCode is the same? But the memory address is the same? How I can get it in java.