当前位置: 首页 > 面试题库 >

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

鲜于雨石
2023-03-14
问题内容

我正在尝试一些有关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());
    }

}

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


问题答案:

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

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



 类似资料:
  • 问题内容: 我正在阅读Head First Java的书中的一句话: 关键是哈希码可以相同,而不必保证对象相等,因为该方法中使用的“哈希算法” 可能会为多个对象返回相同的值。 为什么该方法可能为不同的对象返回相同的值?这不会引起问题吗? 问题答案: *对对象进行 *散列 意味着“ 找到可以由相同实例一次又一次地再现的良好的描述性值(数字) ”。由于Java的哈希码类型为,因此只能具有不同的值。这就

  • 下面是产生散列集大小为3而不是2的代码 您可以看到这两个对象在输出中具有相同的代码,但被计算为不同的,并且产生的代码被计算为3 请协助我如何工作。

  • 问题内容: 我有一个班级和年龄段。但是,当我更改对象的年龄时,该类的所有其他对象也会更改。 有人可以帮助解决这个问题吗? 问题答案: 静态变量 是 类变量, 因此从变量声明中删除为: 根据java docs: 在声明中具有static修饰符的字段称为静态字段或类变量。它们与类关联,而不与任何对象关联。该类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。

  • 问题内容: 我将这段代码与从文中)获得的声明一起使用,它的工作原理绝对不错: 但是,如果我将其更改为以下内容,则会中断,因为除了执行所有其他情况外: 当我通过时会打印出来。我尝试将生成器更改为缓冲,但是得到了相同的响应…这可能是错误,还是我犯了一些错误? 问题答案: 这是您代码中的错误。您忘了每次输入:

  • 问题内容: 决定将这些方法包含在java.lang.Object中的背后原因是什么?平等和哈希对于许多类没有意义。 建立两个接口将更加合乎逻辑: 例如,HashSet定义可能看起来像 这将防止出现一个常见的初学者错误-使用项目集而不实现equals / hashCode。 问题答案: 当我们实现一个接口时,我们注入(或接受)该接口定义的合同。 &是两个不同的合同。但是,如果我们仔细观察,就会发现它

  • 我正在搜索文档中的contacts数组中包含特定_ID的文档。下面是结构: 它执行与$elemmatch查询相同的操作。 我可能错过了一些非常基本的东西,但如果你们能提供一些建议,我将非常感谢。