在Java中
我正在运行以下代码来检查哈希码。
String nameOne = "Deepak";
String nameTwo = new String("Deepak");
System.out.println("nameOne address -- "+nameOne.hashCode());
System.out.println("nameTwo address -- "+nameTwo.hashCode());
代码的输出是
nameOne address -- 2043177526
nameTwo address -- 2043177526
两个对象都是使用new运算符和字符串文字创建的,并相应地存储在堆内存和字符串常量池的不同位置。那么内存地址是如何相同的。
如果我错了,请解释一下这个概念
答案 0 :(得分:2)
比较堆和常量池是不正确的。特别是使用hashCode
。
让我们一步一步走:
由于Java 7字符串池在堆内存中。 Read more
Java中的HashCode与内存地址无关*
JVM有一个arg来指定hashCode默认算法
-XX:hashCode=k
号码k
可以是以下之一:
字符串覆盖默认hashCode
实现。它基于字符串内容。
java.lang.String
:
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}