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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗全涛 黑马帝   /  2012-1-2 21:11  /  1594 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 罗全涛 于 2012-1-2 22:14 编辑

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                Collection collections = new ArrayList();
                ReflectPoint pt1 = new ReflectPoint(3,3);
                ReflectPoint pt2 = new ReflectPoint(3,3);
                ReflectPoint pt3 = new ReflectPoint(3,3);
                collections.clear();
                collections.add(pt1);
                collections.add(pt2);
                collections.add(pt3);
                collections.add(pt1);
                System.out.println(pt1==pt2);
                System.out.println(pt1.equals(pt2));
                System.out.println(pt1==pt3);
                System.out.println(pt1.equals(pt3));
                System.out.println(collections.size());
                System.out.println(pt1.hashCode());
                System.out.println(pt2.hashCode());
                System.out.println(pt3.hashCode());
        }
输出结果:
false
false
false
false
4
12677476
33263331
6413875
问题:
1:查询API上说:int hashCode()  返回此 collection 的哈希码值。
那么对collection对象取hashCode值是每个对象的值吗?还是说根本就没意义?
2:如果有意义,如代码中pt1在collection中插入了两次,问题是当我调用
pt1.hashCode()的值的时候它返回的是哪个的hashCode的值??

评分

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

查看全部评分

2 个回复

倒序浏览
首先你创建了三个对象 他们的hashcode()值肯定是不同的,并且如果你没有重写equals()方法所以这里就相当于==号,结果都是false。
第一问:你调用的hashcode()方法调用的是ReflectPoint 继承于Object()你应该也没有重写。这个是是由对象算出来的一个哈希值 。
第二问:你的pt1 只指向了一个对象 所以就返回的是同一个的对象的hashcode()值。

评分

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

查看全部评分

回复 使用道具 举报
李盈科 发表于 2012-1-2 21:48
首先你创建了三个对象 他们的hashcode()值肯定是不同的,并且如果你没有重写equals()方法所以这里就相 ...

谢谢哈,想通了,pt1插入collection中虽然插入了两次,但这两个collection元素
指向的对象是同一个对象,而hashCode是根据对象的内存地址算出的,而不是根据
collection元素的地址算出来的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马