java-在调用hashcode()方法时生成哈希码

提问

我有点困惑,因为在一次采访中问了这个问题,我说:““在当前运行的应用程序中,在堆上创建对象时会为每个对象生成hashCode”

但是采访说:“它是在我们对对象调用hashcode方法时生成的”

此外,我希望更深入地了解哈希码(以及对Java来说太过浪费),请分享一些链接/源,因为在一些工作面试中广泛要求它

PS:当我执行sysout …在一个对象上时,输出结果为employee @ 942f533

最佳答案

这取决于您在这里的意思.如其他答案所述,函数本身在创建时不会被调用.然而,

   90        * As much as is reasonably practical, the hashCode method defined by
   91        * class {@code Object} does return distinct integers for distinct
   92        * objects. (This is typically implemented by converting the internal
   93        * address of the object into an integer, but this implementation
   94        * technique is not required by the ... [JDK]

http://www.docjar.com/html/api/java/lang/Object.java.html

由于对象的地址是在创建时分配的,因此从某种意义上讲您是正确的.但是,由于不是必需的,并且许多对象都定义了覆盖,所以不一定对所有对象都适用.

通常在面试中,您必须向面试官挑战一点以描述您的意思.如果您这样做是对的,那么问题就可以解决;如果您这样做是对的,那么您错了,那么您至少表明自己对原始陈述的了解比以前更深刻.