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

san*_*ity 6 java reflection hashcode

Javadocs说:

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

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

Boz*_*zho 1

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

Sun的JDK中的代码:

public int hashCode() {
    return getDeclaringClass().getName().hashCode() ^ getName().hashCode();
}
Run Code Online (Sandbox Code Playgroud)

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

  • @sanity:如果你的程序的某些部分确实依赖于不同对象必须具有不同哈希码的事实,**这就是错误**。 (5认同)