Java 根据它们的.equals()方法,s是相等的,那么它们应该返回相同的哈希代码。我想让我困惑的是,它们是两个不同的对象,但具有相同的哈希代码。根据经验法则,如果使用.equals方法使两个对象相等,则它们将具有哈希代码。事实上,他们是两个不同的对象,这让我很
Java 根据它们的.equals()方法,s是相等的,那么它们应该返回相同的哈希代码。我想让我困惑的是,它们是两个不同的对象,但具有相同的哈希代码。根据经验法则,如果使用.equals方法使两个对象相等,则它们将具有哈希代码。事实上,他们是两个不同的对象,这让我很,java,eclipse,object,hashcode,Java,Eclipse,Object,Hashcode,根据它们的.equals()方法,s是相等的,那么它们应该返回相同的哈希代码。我想让我困惑的是,它们是两个不同的对象,但具有相同的哈希代码。根据经验法则,如果使用.equals方法使两个对象相等,则它们将具有哈希代码。事实上,他们是两个不同的对象,这让我很困惑。救命啊!文档给出了计算字符串哈希值的公式。他们在计算中从不参考对象的参考。不知道为什么会投反对票。。。我甚至给出了确切的公式。:-)@不,链接给出了确切的公式。你没有。在此处包含直接回答问题的相关位,将链接保留为参考,或将其添加为注释。这
根据它们的
.equals()
方法,s是相等的,那么它们应该返回相同的哈希代码。我想让我困惑的是,它们是两个不同的对象,但具有相同的哈希代码。根据经验法则,如果使用.equals方法使两个对象相等,则它们将具有哈希代码。事实上,他们是两个不同的对象,这让我很困惑。救命啊!文档给出了计算字符串哈希值的公式。他们在计算中从不参考对象的参考。不知道为什么会投反对票。。。我甚至给出了确切的公式。:-)@不,链接给出了确切的公式。你没有。在此处包含直接回答问题的相关位,将链接保留为参考,或将其添加为注释。这基本上是一个仅链接的答案。@TarangHirani尝试执行“String”。等于(新字符串)(“String”)
。。。它返回true
,因此您所说的适用于这种情况:两个使用equal方法相等的对象具有相同的hashCode
我想让我困惑的是,它们是两个不同的对象,但具有相同的hashCode。根据经验法则,如果使用.equals方法使两个对象相等,则它们将具有哈希代码。事实上,他们是两个不同的对象,这让我很困惑。救命啊!文档给出了计算字符串哈希值的公式。他们在计算中从不参考对象的参考。不知道为什么会投反对票。。。我甚至给出了确切的公式。:-)@不,链接给出了确切的公式。你没有。在此处包含直接回答问题的相关位,将链接保留为参考,或将其添加为注释。这基本上是一个仅链接的答案。@TarangHirani尝试执行“String”。等于(新字符串)(“String”)
。。。它返回true
,因此您所说的适用于这种情况:两个使用equal方法相等的对象具有相同的hashCode
,但我的代码在不同的对象上计算hashCode方法,即str和strOne。我的逻辑正确吗?它们在==
(参考)方面是不同的,但在等于
(逻辑相等)方面是相同的,但我的代码在不同的对象上评估hashcode方法,即str和strOne。我的逻辑正确吗?它们在==
(参考)方面不同,但在等于
(逻辑相等)方面相同
public class Equality {
public static void main(String [] args)
{
String str = "String";
String strOne = new String("String");
System.out.println(str == strOne);
System.out.println(str.equals(strOne));
System.out.println(str.hashCode());
System.out.println(strOne.hashCode());
}
public int hashCode()
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
String str = "String";
String strOne = new String("String");
public int hashCode() {
int h = hash;
int len = count;
if (h == 0 && len > 0) {
int off = offset;
char val[] = value;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
private final char value[];