基于身份的 Java 哈希码

标签 java identity hashcode

Object.hashCode() 的默认行为本质上是返回对象的“地址”,以便 a.hashCode() == b.hashCode() 当且仅当 a == b 时。如果父类(super class)已经定义了 hashCode(),我如何在用户定义的类中获得此行为?例如:

class A {
  public int hashCode() {
    return 0;
  }
}

class B extends A {
  public int hashCode() {
    // Now I want to return a unique hashcode for each object.
    // In pythonic terms, it'd look something like:
    return Object.hashCode(this);
  }
}

想法?

最佳答案

System.identityHashCode(Object)提供这种行为。

你会这样写:

class B extends A {
  public int hashCode() {
    return System.identityHashCode(this);
  }
}

请检查 equals 方法,如果两个对象相同,它只会返回 true。否则它会破坏为 equals 描述的行为和 hashCode . (准确地说,如果两个对象的哈希码不同,则 equals 方法必须返回 false。)提供符合给定 hashCode() 方法的 equals() 实现:

public boolean equals(Object other){
   return this == other;
}

关于基于身份的 Java 哈希码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1063662/

相关文章:

java - 向 TableView 中的单元格添加按钮 (JAVAFX)

java - 如何将已编译的类从一个 Maven 模块包含到另一个模块?

java - Wicket - 运行时类重新加载

asp.net - 错误 HTTP 404.11 通过查询字符串传递帐户激活 token

java - 在 HashSet.contains() 如果 hashcode 返回常量值的情况下调用 hashCode() 和 equals() 的次数

java - 绝对最快的 Java HTML 转义函数

sql-server - 如何在sql server 2008中使用插入后触发器

SQL Server 2012 列标识增量在第 7 个条目上从 6 跳到 1000+

java - 在java中重写equals和hashcode方法?

javascript - location.hash 和回溯历史