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;
}