如何进行对象的值的比较呢?如String类型的变量,是靠调用equals方法来比较的,而其它的类似数组或普通的对象直接调用equals方法一般是不可以的,这是因为String类型的变量通过调用equals方法来比较变量是因为String类覆盖了Object的HashCode方法和equals方法。正如String调用equals方法可以比较String对象变量的值是否相等,一般的对象也可以通过覆盖Object类的方法来达到同样的目的的。如下面代码 所示:
import java.util.HashMap;
import java.util.Map;
/*
* @author mnmlist
* @date 8/18/2015
* @description the basic usage of hashCode and equals method
*/
class Stu
{
String sno;
String sname;
public Stu(String sno,String sname)
{
this.sno=sno;
this.sname=sname;
}
public String getSno()
{
return sno;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Stu))
return false;
if(obj==this)
return true;
return this.sno.equals(((Stu)obj).getSno());
}
public int hashCode()
{
return (sno+sname).hashCode();
}
}
public class HashcodeDemo
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
Map<Stu, Integer>map=new HashMap<>();
Stu st1=new Stu("123", "Sting");
Stu st2=new Stu("234", "mnmlist");
Stu st3=new Stu("345", "Tony");
map.put(st1, 1);
map.put(st2,2);
map.put(st3, 3);
Stu stu=new Stu("123", "Sting");
System.out.println(map.containsKey(stu));
}
}
如上述代码所示,通过覆盖hashCode方法和equals方法可以实现对对象的比较
结果:
true