equals和hashCode
来源:互联网 发布:xp添加网络打印机 url 编辑:程序博客网 时间:2024/06/06 09:50
比较两个东西一模一样有两种情况:
1、比较的东西就是一个东西。
2、比较的东西是相同的,是一个模子里刻出来的。
在计算机的世界里符号 “==”就是第一种情况,也就是说:两个变量在进行比较时,比较的是变量的引用地址。
equals比较的是第二种情况,比较的是变量的内容(默认情况下是这样的),其实equals是可以重写的。
举个例子:现在有两条绳子同时前者一条狗。这绳子都代表着狗。然后==比较的时候,比较的是绳子指向的地址。
而现在有两条狗,equals比较的时候就是比较的是内容了。
equals和hashC
ode方法的重写
在比较两个对象是否为同一个对象时,就得重写equals和hashCode方法了。
重写equals方法时候重写hashcode方法的主要目的就是让Hashtable/HashSet/HashMap等集合正常工作,也就是说他们都是基于hashcode进行地址判断的,如果重写equals而不重写hashcode,对于HashMap来说存入2个相同的对象保存一个key,却对应2个值,而取的时候是无法取出值,其它的集合类也是类似,为了不至于混乱出错,所以以上集合类重写equals时候必须重写hashcode方法。是不是其它的类也是的呢?我认为不完全是,因为普通类重新hashcode意义不大,不写也不会出现编译错误,但SUN(ORACLE)官方规定,还是按照规定来吧,只其然也要知其所然。
看下面小小的Demo
import java.util.*;class Person{private String name;private int age;public Person(String name, int age){this.name = name;this.age = age;}public String toString(){return "姓名:" + this.name +",年龄:"+this.age;}//重写equals和重写hashCode方法public boolean equals(Object obj){if(obj instanceof Person){Person m = (Person)obj; return(name==m.name && age==m.age) //return (name == m.name);}return super.equals(obj);}public int hashCode(){return this.name.hashCode()+this.age;}};public class AdvTest{public static void main (String args[]){/*Map m = new HashMap();m.put("张三",new Person("张三"));System.out.println(m.get("张三"));*///********************************Map m = new HashMap();m.put(new Person("张三",31),"张三,31");System.out.println(m.get(new Person("张三",30)));//******************************/*Map m = new HashMap();Person p = new Person("张三");m.put(p,"张三");System.out.println(m.get(p));*/}};
如有错误,还请指出,十分感激啊。
0 0
- equals() 和 hashCode()
- hashcode()和equals()方法
- hashcode() 和 equals()方法
- 关于equals和hashCode
- 重写equals()和hashCode()
- 关于hashcode()和equals()
- hashcode和equals
- equals和hashCode
- equals 和 hashcode
- 关于equals() 和hashcode()
- 关于equals() 和hashcode()
- equals()和hashCode()
- equals() 和hashcode()详解
- hashCode()和equals()
- equals和 hashcode比较
- 浅谈equals和hashcode
- equals和hashCode方法
- hashCode() 和 equals() 理解
- 关于null的typeof和instanceof
- 如何用一根网线连接两台电脑,传输大文件
- 日常 2017_01_15
- 统计自然语言处理学习 (序及第一章)
- 窗口设置背景图片失败
- equals和hashCode
- 2301: [HAOI2011]Problem b
- python并发
- 函数指针基础
- <<UNIX环境高级编程>>之第四章理解
- 位运算
- SPOJ 694/705 后缀数组
- 安卓按键精灵手机助手(功能:安卓版抓抓、命令库、制作电脑UI界面)
- HDU3183- 贪心