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

Vij*_*bey 12 java equality

我正在尝试一些围绕java中的对象相等的代码.正如我在某处读过的那样

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

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

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

你能否就这个问题给我一些见解和看法?

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

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());
    }

}
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*rdt 15

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

为什么不呢?非内核程序永远不会使用绝对内存地址,它们使用虚拟内存,每个进程都有自己的地址空间.因此,毫无疑问,确定性程序会在每次运行中将内容放置在同一位置.