码迷,mamicode.com
首页 > 编程语言 > 详细

Java-equal和hashCode

时间:2015-08-30 01:02:25      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:equal   hashcode   

纸上得来终觉浅,绝知此事要躬行  --陆游    问渠那得清如许,为有源头活水来  --朱熹


equals()的作用是用来判断两个对象是否相等,在Object类中,equals(Object obj)是通过判断两个对象的地址是否相等(是否是同一个对象)来区分它们是否相等,源码:

public boolean equals(Object obj) 
{
return (this == obj);
}
因为Object类是所有类的父类,因此在子类中使用equals(Object obj)时都是用来判断两个对象是否是同一个对象,当向判断两个对象的内容是否相等时需要重写equals()方法。还有常用的方法是“==”,等号也是对对象引用的判断。

重写equals()和没有重写equals()的示例对比:
public class Hello {

public static void main(String []args)
{
Person1 person1=new Person1(10, "tian");
Person1 person2=new Person1(20, "tian");
if(person1.equals(person2))
{
System.out.println("相等");
}
else
{
System.out.println("不想等");
}

if(person1==person2)
{
System.out.println("相等");
}
else
{
System.out.println("不相等");
}
Person2 person22=new Person2(10, "tian");
Person2 person23=new Person2(10, "tian");
if(person22.equals(person23))
{
System.out.println("相等");
}
else
{
System.out.println("不相等");
}
if(person22==person23)
{
System.out.println("相等");
}
else
{
System.out.println("不相等");
}
}
public static class Person1
{
int age;
String name;
public Person1(int age,String name)
{
this.age=age;
this.name=name;
}
}
public static class Person2
{
int age;
String name;
public Person2(int age,String name)
{
this.age=age;
this.name=name;
}
@Override
public boolean equals(Object object)
{
if (object==null)
{
return false;
}
if(this==object)
{
return true;
}
if(this.getClass()!=object.getClass())
{
return false;
}
Person2 person2=(Person2)object;
return person2.name.equals(name)&&person2.age==age;
}
}
}
在Object类中,hashCode()方法是本地方法,返回的是对象的地址值,而Object类中的equals()方法比较的也是两个对象的地址值,因此equals()相等,说明两个对象地址值的相等,因此hashCode()也就相等了。

因为在常用的函数中都会对equals()和hashCode()两个函数进行重写,一般对equals()函数重写时也需要对hashCode()函数进行重写,不然会出现equals()相等而hashCode()不相等的情况。在集合类中的,HashSet,HashMap和Hashtable中存在hashCode()相等而equals()不相等的情况,因为都是对hashCode()和equals()进行重写了。

版权声明:知识在于分享,技术在于交流,转载时请留一个博主的链接就好

Java-equal和hashCode

标签:equal   hashcode   

原文地址:http://blog.csdn.net/qq924862077/article/details/48094775

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!