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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 香草芭芙 于 2014-10-12 00:52 编辑

hashCode值 都是 Demo@3c , 非同一对象, 毕老师说的是 该地址下顺延, 而且两个对象都在同一地址上~ , 不理解这句话的意思, 按理说一个内存地址就一个数值啊, 顺延是 3c+1 的意思吗? 3c+1 地址又不一样了, :dizzy:

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

8 个回复

倒序浏览
你这描述我实在是看不懂。。。
回复 使用道具 举报
第14天, 177_集合框架(HashSet)_黑马程序员_java基础视频.avi
视频时间:  12:35  ~~13:20
回复 使用道具 举报
并不是+1,还是 Demo@3c,同一个地址上有两个对象,hashcode相同时,再去比较equals,如果equals相同就不加进来了,请大神再来个详细的表述吧
回复 使用道具 举报
一个内存地址 怎么能存两个对象呢? 我就想问这个
回复 使用道具 举报
就像两个人同名但是不是一个人,hashCode是程序员自己依照一定算法写的,这个内存地址是后来给加上去的,算法不会那么完美,重复的情况是会有的,只能尽量避免,把重复降到最低。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
总结:
hashCode 重写之前跟内存地址有关系,
public int hashCode()
        {
                return 1;
        }
重写之后, 和内存地址没关系了, HashSet 先判断 hashCode 是否相同, 然后调用 equals 再比较,
public int hashCode()
        {
                return this.name.hashCode() + this.age * 21;               
        }
这么重写的用意是使hashcode相同的对象, 对象内容也相同, 判断效率提高.
至于HashSet 怎么在内存中存储对象就不得而知了.

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
cs8630323 发表于 2014-10-11 19:49
就像两个人同名但是不是一个人,hashCode是程序员自己依照一定算法写的,这个内存地址是后来给加上去的,算 ...

比喻的好, 谢谢, 启发很大, :)
回复 使用道具 举报
java.lang.Object的hashcode 不是代表 对象所在内存地址;不同的对象在内存中的地址不同,但是他们的hashcode是完全可能相同的。具体的分析这里有http://www.blogjava.net/leochiang/archive/2012/08/01/384546.html。楼主可以看看,其实我也不是太明白,先记着结论吧,等入学以后找老师再问问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马