黑马程序员技术交流社区
标题:
测试结果让你晕菜了吗
[打印本页]
作者:
请备注
时间:
2014-4-6 13:29
标题:
测试结果让你晕菜了吗
class Demo
{
public int hashCode()
{
return 60;
}
}
class HashSetDemo
{
public static void main(String[] args)
{
Demo d1 = new Demo();
Demo d2 = new Demo();
sop(d1);
sop(d2);
sop(d1==d2);
sop(d1.equals(d2));
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
Demo@3c
Demo@3c
false //毕老师视频里说这俩对象地址值是一样的 但是结果又是false。
false
作者:
谭荣强
时间:
2014-4-7 08:24
怎么可能两个对象的内存地址值是一样的,又不是单例之类的。new了一个新对象会分配一个新的内存地址,两个肯定不一样,但是两个对象的hash值是一样的。你是不是听错了,哪个视频?@我看看
作者:
2528870651
时间:
2014-4-7 12:17
class Demo
{
public int hashCode()
{
return 60;
}
}
复制代码
不管你调用多少次,他们的哈希值一定是Demo@3c,永远不会变。
因为你复写的hashCode()函数返回的是60
作者:
anqi
时间:
2014-4-7 12:50
本帖最后由 anqi 于 2014-4-7 12:52 编辑
额找到你的帖子了,我刚才没找到在外面发了一个这个的解释。
==并不是比较的hashCode,比较的是内存地址值。
hashCode是根据hash算法算出来的,比如我们日常中可以利用算法生成一个文件的MD5码,它几乎不重复。
hashCode它的作用是帮助jvm快速定位集合元素的地址。就像我们可以利用角标快速找到数组元素的位置一样。我也模糊记着毕老师这里貌似讲错了,应该是口误,因为java抛弃了指针,我们永远不用操作地址值。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2