[问题] HashCode 与 内存位置的关联

楼主: noapaov (单身汉)   2015-05-24 18:01:23
最近看了一下书籍, 不太清楚理解是否有错, 想请教一下各位
Object 类别所提供的 hashCode() method, 主要是返回物件的内存位置
经过运算后的整数, 所以与内存有密切关系
所以每个物件的HashCode()理论上应该都不一样, 但是有些子类别继承后会
进行equals和HashCode的覆写,例如String、Array等, 所以就有可能造成 :
如果两个物件使用equals(Object) 测试结果为不相等,
则这两个物件呼叫 hashCode 时,可以获得不同的整数结果("可以相同,也可以不同")
所以总结是如果继承Object类的子类别, 没有对equals hashCode进行改写,
那么这些物件产生的HashCode应该都不一样, 但如果重写就有可能造成HashCode相等, 但不一定是参考相同的内存位置情况
不知道原理是否是这样
作者: mars90226 (火星人)   2015-05-24 20:48:00
hashCode跟内存无关他就是拿来计算hash需要的key而已hash需要这个key来判断两个Object是否一样
作者: swpoker (swpoker)   2015-05-24 21:11:00
这里不是C++啊?!为什么都内存位置东跟记亿体使用西呢?????
作者: MonyemLi (life)   2015-05-24 21:43:00
hashmap key 会受hashcode影响,但hash并不是内存位置
楼主: noapaov (单身汉)   2015-05-24 23:40:00
主要是看到document api写到 Object.hashCode()的定义This is typically implemented by converting theinternal address of the object into an integer
作者: ctrlbreak   2015-05-25 02:38:00
这边指的位址在Java应该是物件的reference value
楼主: noapaov (单身汉)   2015-05-25 08:26:00
你说的参考值指的是参考位置吗?抱歉没说清楚, 我指的都是hashCode()回传值
作者: Killercat (杀人猫™)   2015-05-25 16:21:00
HashCode不见得是内存位置有兴趣可以看看String的HashCode怎么实作的去找一下OpenJDK原始码翻一下吧 很好找的String hashCode()可能你看了会噗疵笑出来
作者: tas72732002 (葱头)   2015-05-25 18:30:00
原PO是说Object类别的hashCode() 不是String覆写后的hashCode()
作者: Killercat (杀人猫™)   2015-05-25 18:45:00
下面有提供比较全面的说法啦... XD
作者: ctrlbreak   2015-05-25 20:26:00
我参考值指的就是你下一篇说的物件序号默认的hashCode一般是以物件序号为基础去算出来的
作者: realmeat (真肉)   2015-05-26 13:53:00
写了java到现在, 我还没考虑过'内存位置'这东西
作者: pttworld (批踢踢世界)   2015-05-26 15:37:00
理论上是毋须探究的。顶多具备GC的概念就够了。

Links booklink

Contact Us: admin [ a t ] ucptt.com