为什么hashCode()在所有连续执行中为对象返回相同的值?

2022-09-04 07:18:59

我正在尝试一些关于java中对象相等的代码。正如我在某处读到的那样

hashCode()是通过应用哈希函数生成的数字。每个对象的哈希函数可以不同,但也可以相同。在对象级别,它返回对象的内存地址。

现在,我有示例程序,我连续运行了10次。每次我运行程序时,我都会得到与哈希代码相同的值。

如果函数返回对象的内存位置,为什么java(JVM)在连续运行中将对象存储在相同的内存地址?hashCode()

你能给我一些见解和你对这个问题的看法吗?

我正在运行的用于测试此行为的程序如下:

public class EqualityIndex {

    private int index;

    public EqualityIndex(int initialIndex) {
       this.index = initialIndex;
    }

    public static void main(String[] args) {
        EqualityIndex ei = new EqualityIndex(2);
        System.out.println(ei.hashCode());
    }

}

每次我运行此程序时,返回的哈希代码值都是 。4072869


答案 1

为什么java(JVM)在连续运行中将对象存储在相同的内存地址?

为什么不呢?非内核程序从不使用绝对内存地址,它们使用虚拟内存,其中每个进程都有自己的地址空间。因此,确定性程序在每次运行中将内容放在同一位置也就不足为奇了。


答案 2

好吧,对象很可能最终位于虚拟内存中的同一位置。这没有什么矛盾的。底线是你无论如何都不应该在乎。如果哈希代码被实现为返回与内部存储地址相关的内容(根本不能保证!),那么无论如何,您都可以对该信息做任何有用的操作。