Equals函数
Equals函数在Object类中,Object是所有类的父类,而Object被包含在jdk开发包中
在引用类型中,“==”是判断引用是否指向同一个堆内存地址,比较变量的值时,引用数据类型不能用“==”比较,要用equals比较
在基本数据类型中指的是判断两个变量值是否相等。
Equals是用来比较两个对象的内容是否相等
class User{
String name;
int age;
//复写equals方法
public boolean equals(Object obj){
//判断两个引用是否指向两个堆内存的同一个地址
//this是指使用这个类的对象
if(this==obj){
return true;
}
//判断obj是否是User类型
boolean b=obj instanceof User;
if(b){
//将obj向下转型为User类型
User u=(User)obj;
//判断两个对象的成员变量的值是否完全相同
//这里的equals是已经复写的函数,因为String是引用数据类型
//而比较引用数据类型的值是否相等,我们使用equals函数
if(this.age==u.age&&this.name.equals(u.name)){
return true;
}
else{
return false;
}
}else{
return false;
}
}
}
class Test{
public static void main(String args[]){
User u1=new User();
User u2=new User();
User u3=new User();
u1.name="zhangsan";
u1.age=12;
u2.name="lisi";
u2.age=12;
u3.name="zhangsan";
u3.age=12;
System.out.println(u1.equals(u2));
System.out.println(u1.equals(u3));
}
}
_hashCode()与toString()函数
这两个函数都被包含在Object中,那么所有类都有这两个函数
class User{
String name;
int age;
public User(){
}
public User(String name,int age){
this.name=name;
this.age=age;
}
public boolean equals(Object obj){
if(this==obj){
return true;
}
boolean b=obj instanceof User;
if(b){
User u=(User)obj;
if(this.age==u.age&&this.name.equals(u.name)){
return true;
}
else{
return false;
}
}
else{
return false;
}
}
//复写hashcode方法
public int hashCode(){
int result=17;
result=31*result+age;
result=31*result+name.hashCode();//String中的hashcode方法是已经被人复写好了的
return result;
}
}
import java.util.*;
class Test{
public static void main(String args[]){
User u=new User("zhangsan",12);
HashMap<User,String> map=new HashMap<User,String>();
map.put(u,"abc");
String s=map.get(new User("zhangsan",12));
System.out.println(s);
}
}
复写toString
public String toString(){
String result="age:"+age+","+"name:"+name;
return result;
}
转载于:https://blog.51cto.com/learnnew/1200318