哈希码与对象的引用或地址之间的区别?

问题描述 投票:0回答:4

哈希码与对象的引用或地址之间的区别?

java reference hashcode
4个回答
5
投票

在JavaME中,这三件事是无关的。

对象的 hashCode 是它的半唯一标识符。

对对象的引用是该对象的作用域句柄。

对象的地址(可能)无法获取,而且肯定没用。


0
投票

对象的地址/引用指向对象在内存中所处的位置。

哈希码是通过哈希算法生成的,用于识别哈希集合中的对象。不同的算法会产生不同的代码(不好的算法会导致不好的哈希码和集合中更多的冲突)。


0
投票

对象的哈希码和它在内存中的地址没有任何关系。只是对象的不同实现(实际上是不同的语言)使用对象的内存地址作为识别该对象的唯一方式。

一般来说,方法对

hashCode
equals
提供了比较对象同一性的方法。在实现您自己的散列方案时,您应该记住散列值应该由使对象唯一的东西组成。例如,假设您向数据库系统提供一个对象映射器并想要引入一个
Customer
对象 - 您知道在您的表中,客户的主键是唯一的,因此返回该主键作为哈希码将完全可以接受,并且与对象的内存地址没有任何关系。

如果使用名字、姓氏和出生日期来识别客户(这并不足以唯一地识别一个人,但为了简洁起见,让我们保持简单),那么您可以将这 3 个值散列成散列码,在您的 O/R 映射实现中使用它。


0
投票

看到对象的哈希码和引用是两个不同的东西。你可以简单地说,对象的引用是你在内存中找到对象的路径(或者简称为对象在内存中的位置)。但哈希码是一个整数值,它告诉您的对象是否唯一,即它是否包含与内存中另一个对象相同的数据或具有不同的数据(唯一)。 看下面的代码,我们通过创建两个String类的对象来理解它:

    String str = "StackOver";
    String str2 = new String("StackOver");
    System.out.println(str.hashCode());
    System.out.println(str2.hashCode());

在此,将创建两个对象。由于两个对象位于内存中的不同位置,因此它们具有不同的引用,该引用将存储在 str 和 str2 中。但对象具有相同的值,因此它们将具有相同的哈希码。

注意:使用“new”关键字创建字符串对象将始终在内存中创建一个新对象,即使您有另一个具有相同值的字符串对象。

© www.soinside.com 2019 - 2024. All rights reserved.