equals、toString、hashcode()函數

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;

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章