看了網(wǎng)上關于equal與==的區(qū)別章姓,感覺很多有些片面舅列,不仔細漩蟆,這里我來說說我對equal與==的理解
首先要了解基本類型與引用類型
1.int,char,boolean之類的就是基本類型空繁,我們只要使用==即可判斷是否相等殿衰,無法使用equals
2.引用類型分為兩類,第一類是重寫過hashcode()和equals()方法的類,比如String,Integer盛泡,等闷祥,這些類使用==比較的是內(nèi)存地址,即不同引用是否指向同一個對象傲诵,是凯砍,則true。equals比較則是直接比較對象的內(nèi)容拴竹,不是判斷不同引用是否指向同一個對象悟衩,只要對象里的各種參數(shù)完全一致,就為·true
3.第二類引用類型栓拜,就是沒有重寫過hashcode()和equals()方法的類座泳,我們看Object類下的equals()方法
public boolean equals(Object obj) {
return (this == obj);
我們知道所有類都是Object類的子類,就是說如果子類不重寫equals()方法幕与,那么該類使用equals()方法就是使用Object下的equals挑势,就是不同引用是否指向同一個對象,是啦鸣,則true潮饱。如果我們希望實現(xiàn)普通類只比較對象的屬性,可以對hashcode()和equals()進行重寫诫给,下面就是
class Student {
private String type;
private String name;
private int age;
Student(String type,String name,int age){
this.age=age;
this.type=type;
this.name=name;
}
@Override
public int hashCode() {
int B=31; // 31 131 1313 13131 131313 etc..
int hash=0;
hash=hash*B+age;
hash=hash*B+type.toUpperCase().hashCode();
hash=hash*B+name.toUpperCase().hashCode();
return hash;
}
@Override
public boolean equals(Object obj) {
if(this==obj){
return true;
}
if(obj==null){
return false;
}
Student student=(Student) obj;
return student.hashCode()==this.hashCode();
}
}