我了解到hashcode是一个唯一标识引用号,它是一个十六进制数.
我的疑问是,参考编号是否代表对象的内存地址?
例如:
Employeee e1=new Employee();
System.out.println(e1.hashcode());
Run Code Online (Sandbox Code Playgroud)
这段代码会返回我对象的内存地址吗?
如果我没记错的话,在Object()类型的对象的java中默认的hashCode()实现是返回对象的内存地址.当我们创建自己的类时,我读到我们想要覆盖hashCode(),这样当我们将它们插入到哈希相关的集合(如HashMap())时,它将正常工作.但为什么内存地址不好?
当然,我们将永远耗尽内存而你会发生冲突,但我认为这是一个问题的唯一情况是你处理TONS数据并且内存很少,然后它会开始影响性能,因为java中的哈希相关集合通过链接解决冲突(桶将链接到解析为相同哈希码/索引的值列表).
我不是在讨论String类或任何其他重写hashcode的类.假设我只是创建了一个Object类的新对象,那么hashcode()无论如何都会identityHashCode(Object x)返回true,返回该对象的内存地址?
执行equals()并hashCode()应遵循这些规则。
o1.equals(o2),o1.hashCode() == o2.hashCode()则应始终为真。o1.hashCode() == o2.hashCode()是真的,这并不意味着那o1.equals(o2)将是真的。如果o1.hashCode() == o2.hashCode()是真的。我知道,如果两个对象相等,那么这两个对象应该返回相同的哈希码。如果两个对象的哈希码相同,为什么不是这样o1.equals(o2)?