Method.hashCode()是否考虑方法的参数类型?

时间:2011-04-01 21:51:18

标签: java reflection hashcode

Javadocs说:

  

返回此Method的哈希码。哈希码被计算为底层方法声明类名和方法名的哈希码的异或。

这个描述中明显缺少的是Method的参数类型的类型 - 这是否意味着同一个类上具有相同名称但参数不同的两个方法具有相同的hashCode()

3 个答案:

答案 0 :(得分:1)

你是对的 - 具有相同名称和相同声明类的方法具有相同的哈希码。我同意,这有点违反直觉。

Sun的JDK中的代码:

public int hashCode() {
    return getDeclaringClass().getName().hashCode() ^ getName().hashCode();
}

hashCode()并不是平等的标志。 equals(..)方法考虑了参数。

答案 1 :(得分:0)

让我们看看

Method[] ms = String.class.getMethods();
for (Method method : ms) {
    System.out.println(method.getName());
    System.out.println(method.hashCode());
}

的compareTo -319450075

的compareTo -319450075

的indexOf 887779372

的indexOf 887779372

的indexOf 887779372

的indexOf 887779372 ...

答案 2 :(得分:0)

所以看起来如此。请注意,equals / hashCode合约仍然保留,因为两个与equals()有利的方法将具有相同的hashCode。