黑马程序员技术交流社区

标题: 测试结果让你晕菜了吗 [打印本页]

作者: 请备注    时间: 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
  1. class Demo
  2. {
  3.         public int hashCode()
  4.         {
  5.             return 60;
  6.         }
  7. }
复制代码


不管你调用多少次,他们的哈希值一定是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