hashCode()和equals()区别和作用.doc

hashCode()和equals()区别和作用.doc

ID:62033415

大小:29.00 KB

页数:4页

时间:2021-04-15

hashCode()和equals()区别和作用.doc_第1页
hashCode()和equals()区别和作用.doc_第2页
hashCode()和equals()区别和作用.doc_第3页
hashCode()和equals()区别和作用.doc_第4页
资源描述:

《hashCode()和equals()区别和作用.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、HashSet和HashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键. 那么Java运行时环境是如何判断HashSet中相同对象、HashMap中相同键的呢?当存储了“相同的东西”之后Java运行时环境又将如何来维护呢? ﻫﻫ在研究这个问题之前,首先说明一下JDK对equals(Objectobj)和hashcode()这两个方法的定义和规范: 在Java中任何一个对象都具备equals(Objectobj)和hashcode()这两个方法,因为他们是在Object类中定义的。 equals(Objectob

2、j)方法用来判断两个对象是否“相同”,如果“相同”则返回true,否则返回false. ﻫhashcode()方法返回一个int数,在Object类中的默认实现是“将该对象的内部地址转换成一个整数返回”. 接下来有两个个关于这两个方法的重要规范(我只是抽取了最重要的两个,其实不止两个): 规范1:若重写equals(Objectobj)方法,有必要重写hashcode()方法,确保通过equals(Object obj)方法判断结果为true的两个对象具备相等的hashcode()返回值。说得简单点就是:“如果两个对象相同,那么他们的hashcode应该相等”。不过请注意:

3、这个只是规范,如果你非要写一个类让equals(Objectobj)返回true而hashcode()返回两个不相等的值,编译和运行都是不会报错的。不过这样违反了Java规范,程序也就埋下了BUG. ﻫ规范2:如果equals(Object obj)返回false,即两个对象“不相同”,并不要求对这两个对象调用hashcode()方法得到两个不相同的数.说的简单点就是:“如果两个对象不相同,他们的hashcode可能相同”. ﻫ根据这两个规范,可以得到如下推论: 1、如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。 2、如果两个对象不equ

4、als,他们的hashcode有可能相等。 3、如果两个对象hashcode相等,他们不一定equals。 4、如果两个对象hashcode不相等,他们一定不equals. ﻫﻫ这样我们就可以推断Java运行时环境是怎样判断HashSet和HastMap中的两个对象相同或不同了.我的推断是:先判断hashcode是否相等,再判断是否equals。 ﻫ测试程序如下:首先我们定义一个类,重写hashCode()和equals(Objectobj)方法 Java代码[java] viewplaincopy1.class A {    2.    1.    @Override  

5、  2.    public boolean equals(Object obj) {    3.        System.out.println("判断equals”);    4.        return false;    5.    }    6.    7.    @Override    8.    public int hashCode() {    9.        System。out.println("判断hashcode");    10.        return 1;    11.    }    12.}     然后写一个测试类,代

6、码如下: Java代码[java] viewplaincopy1.public class Test {    2.    3.    public static void main(String[] args) {    4.        Map〈A,Object〉 map = new HashMap();    5.        map。put(new A(), new Object());    6.        map。put(new A(), new Object());    7.            8.        Syste

7、m。out.println(map.size());    9.    }    10.        11.}     运行之后打印结果是: ﻫﻫ判断hashcode ﻫ判断hashcode ﻫ判断equals ﻫ2 ﻫ可以看出,Java运行时环境会调用newA()这个对象的hashcode()方法。其中: ﻫ打印出的第一行“判断hashcode”是第一次map。put(newA(),newObject())所打印出的。 ﻫ接下来的“判断hashcode”和“判断equals”是第二次map.put(newA()

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。