当前位置: 首页 > 面试题库 >

如何获取覆盖hashCode()的对象的唯一ID?

束雅达
2023-03-14
问题内容

当Java中的类未覆盖 hashCode()时 ,打印此类的实例将提供一个不错的唯一数字。

Object的Javadoc谈到了 hashCode()

在合理可行的范围内,由Object类定义的hashCode方法确实为不同的对象返回不同的整数。

但是,当类重写 hashCode()时 ,如何获得其唯一编号?


问题答案:

System.identityHashCode(yourObject)将给出yourObject的“原始”哈希码为整数。唯一性不一定得到保证。Sun
JVM实现将为您提供与该对象的原始内存地址相关的值,但这是实现的详细信息,您不应依赖它。

编辑:答案下面汤姆的评论重新修改。内存地址和移动对象。



 类似资料:
  • 我试图覆盖提到的方法为我的: MyObject: 如何重写hashcode(),equals()和compareTo()方法? 目前我有以下几点: 我读到通过id比较是不够的,这是对象是数据库的持久实体(见这里)。 此类型的所有对象的名称和编号不是唯一的。 那么我应该如何覆盖它呢? 我还需要比较它里面的hashMap吗? 我很困惑。该对象唯一独特的地方是map myMap,它将在生命周期的后期填充

  • 我正在开发一个Java中的图形库(https://github.com/aisthesis/java-graph2012 完整的上下文),并且需要覆盖权重边缘类的hashCode(),其中边缘不定向。也就是说,我设置了我的 equals() 覆盖方法,以便对于 2 个加权边 e1 和 e2,如果以下条件之一成立(from() 和 to() 方法返回边的尾部和头顶点),则它们相等: e1.从() =

  • 问题内容: 我设置了一个向量集,以避免用迭代器分配之类的东西破坏GC(对于HashSet的值或键的每个遍历,对于集合引用和集合迭代器,您将分别获得一个新的/免费的) 无论如何,该方法是每个对象的唯一ID。(64位版本会失败吗?) 但是无论如何它都是可重写的,因此不能保证唯一,也不能保证每个对象实例唯一。 如果要创建“ ObjectSet”,如何为每个对象实例获取保证的唯一ID? 我刚刚找到了这个:

  • 问题内容: 如果未重写hashCode()方法,那么对Java中的任何对象调用hashCode()的结果是什么? 问题答案: 在HotSpot JVM中,默认情况下会在第一次调用时生成未重载或随机数并将其存储在对象标头中。随后的调用或仅从标头中提取此值。默认情况下,它与对象内容或对象位置没有共同点,只有随机数。此行为由HotSpot JVM选项控制,该选项具有以下可能的值: 0:使用全局随机数发生

  • 我在将应用程序从Java镜像到Kotlin时遇到了一些问题。我用java编写了这个类,效果很好: 在IntelijiIdea中自动转换后,它开始变成这样 但编译器告诉我 意外重写:以下声明具有相同的JVM签名(to boolean(Ljava/lang/String;)Z): fun toBoolean(p0: String?):在my . util . booleanutils fun to B

  • 问题内容: 堆垛机。我一直在网站上搜索我的问题,但没有找到我想要的东西。我坚持下面的代码: 得到了一个不错的数组列表,但是如果我在ArrayList中添加更多“ newUsers”,它们似乎会相互覆盖。我不想创建一个newUser1,newUser2对象,因为稍后在我的程序中,我必须能够直接从该程序添加新用户。 如何实现呢? ValidateUser: } 问题答案: 如果我理解正确,那么您是以这