哈希码编号是否代表内存地址?

我了解到hashcode是唯一标识引用号,它是一个hex数。
我的疑问是,引用号是否代表对象的内存地址?

例如:

Employeee e1=new Employee(); System.out.println(e1.hashcode()); 

这段代码会返回我对象的内存地址吗?

Hashcode不是唯一标识。 它只是一个可以帮助您区分对象的数字。 两个不同的对象可能具有相同的哈希码,并且很好。

HashCode特征:

  1. 如果obj1和obj2相等,则它们必须具有相同的哈希码。
  2. 如果obj1和obj2具有相同的哈希码,则它们不必相等。

不一定是内存地址。 对于不同的对象,它应该保持不同。 但它可能是任何东西。 您也可以使用自己的默认hashCode定义覆盖。

如果Employee类没有重写hashCode()方法,那么它将使用在其超类中定义的方法,可能是Object类。 Object类中的hashCode()表示,

 尽管合理实用,但是由Object类定义的hashCode方法
确实为不同的对象返回不同的整数。  (这通常是 
通过将对象的内部地址转换为整数来实现, 
但是JavaTM不需要这种实现技术 
编程语言。) 

所以,简而言之,它可能会或可能不会取决于实现。假设,如果Employee类已将hashCode()重写为(虽然不好的做法和无用):

 public int hashCode() { return 10; } 

然后,您可以看到它不会返回内存地址。

简单回答NO

A hashcode is an integer value that represents the state of the object upon which it was called. That is why an Integer that is set to 1 will return a hashcode of "1" because an Integer's hashcode and its value are the same thing. A character's hashcode is equal to it's ASCII character code. If you write a custom type you are responsible for creating a good hashCode implementation that will best represent the state of the current instance.

因此,对于您的类,您可以实现哈希码方法并返回您想要的任何内容。

hashCode是本机实现,它在一定程度上提供内存地址。

任何你可以做到的方法。

如果你仔细看API

如果两个对象根据equals(Object)方法相等,则对两个对象中的每一个调用hashCode方法必须生成相同的整数结果。

我不知道你从别人的答案中了解了多少,但在我读完之后,我的疑虑很清楚

关于 @Ralf Sternberg的hashCode()应该知道的3件事

Hashcode是JVM用于散列以便存储和检索对象的数字。 例如,当我们在hashmap中添加一个对象时,JVM会查找hashcode实现来决定将对象放在内存中的位置。 当我们再次检索对象时,hashcode用于获取对象的位置。 请注意,hashcode不是实际的内存地址,而是JVM从指定位置获取对象的链接,复杂度为O(1)。

根据Java文档:

尽可能合理, Object类定义的hashCode方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但Java编程语言不需要此实现技术。)

Hashcode是唯一分配给该对象的32位有符号整数。 它是插入hashmap时哈希函数的结果

对象的哈希码是特定于实现的,但我非常怀疑任何JVM实现都会使用内存地址。 由于垃圾收集是Java的核心function,这意味着对象可以移动,从而在其生命周期内具有不同的内存地址,即使其内容保持不变(这将违反哈希码规范)。