java - 重写 hashCode,为什么不使用 this.hashCode() ?

标签 java overriding hashcode

当重写 Java 中的 equals()hashcode() 方法时,为什么不经常使用它:

public int hashCode() {
    return (int) this.hashCode();
}

或者甚至是上面引入素数的内容:

public int hashCode() {
    final int prime = 31; //31 is a common example
    return (int) prime * this.hashCode();
}

这是不好的做法还是根本不起作用?

最佳答案

方法:

public int hashCode() {
    return (int) this.hashCode();
}

会导致StackOverflowError,因为它会无限递归到自身,除非您将this替换为super。你的第二种方法也有同样的问题。

此外,将 int 类型的值转换为 int 也是没有用的。

如果您没有为方法提供任何有用的新内容,请不要覆盖它。

关于java - 重写 hashCode,为什么不使用 this.hashCode() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23216707/

相关文章:

java - 在 Struts2 webapp 中更改 DateFormat 或默认语言环境

java runtime.getRuntime.exec( cmd ) 带有长参数

java - 处理从 Java 到 PHP 再到 MySQL 的字符编码

html - 如何覆盖 CSS?

java - 哈希集中链表桶的最大长度?

java - 检测标签的正则表达式

java - 是否可以在 Java 中覆盖泛型类的方法?

java - 我是否需要再次实现父类的接口(interface)

javascript - 从字符串生成 0 到 1 之间的确定性哈希数

javascript - 打印出哈希值?