A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 请备注 中级黑马   /  2014-4-6 13:29  /  1469 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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      

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
怎么可能两个对象的内存地址值是一样的,又不是单例之类的。new了一个新对象会分配一个新的内存地址,两个肯定不一样,但是两个对象的hash值是一样的。你是不是听错了,哪个视频?@我看看
回复 使用道具 举报
  1. class Demo
  2. {
  3.         public int hashCode()
  4.         {
  5.             return 60;
  6.         }
  7. }
复制代码


不管你调用多少次,他们的哈希值一定是Demo@3c,永远不会变。
因为你复写的hashCode()函数返回的是60
回复 使用道具 举报
本帖最后由 anqi 于 2014-4-7 12:52 编辑

额找到你的帖子了,我刚才没找到在外面发了一个这个的解释。
==并不是比较的hashCode,比较的是内存地址值。
hashCode是根据hash算法算出来的,比如我们日常中可以利用算法生成一个文件的MD5码,它几乎不重复。
hashCode它的作用是帮助jvm快速定位集合元素的地址。就像我们可以利用角标快速找到数组元素的位置一样。我也模糊记着毕老师这里貌似讲错了,应该是口误,因为java抛弃了指针,我们永远不用操作地址值。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马