Java中所有類的超類Object
阿新 • • 發佈:2019-01-30
- Object的地位
在Java中所有的類都繼承於Object類,但不用在宣告一個類時顯示的extends Object
Object中幾個重要的方法:
1.equals方法:
用於檢測一個物件是否等於另外一個物件,即判斷兩個物件是否具有相同的引用.然而對於大多數類來說這種檢測沒有太大意義。
在實際中使用者更傾向與更具自己的標準來判斷兩個物件是否相等。例如:如果來年各個僱員的姓名 薪水和僱傭日期都一樣,就認為他們是相等的。下買呢示例演示equals方法的實現
class Employee{
int salary;
String name;
String hireday;
//返回一個布林值,true表示相等,否則不相等
@Override
public boolean equals(Object otherobject){
//如果是同一個引用則說明相等
if(this==otherobject) return true;
//引數不能為空
if(otherobject==null) return false;
//兩個物件必須同屬一個類(用到了反射)
if(this.getClass!=otherobject.getClass) return false;
//通過上買你的判斷我們知道otherobject為一個非空的Employee物件
Employee other=(Employee)otherobject;
//接下來實現使用者自己的比較標準:僱員的姓名 薪水和僱傭日期都一樣
return Object.equals(name,other.name)
&&salary==other.salary
&&Object.equals(hireday,other.hireday)
}
}
如果存在繼承關係,則先呼叫父類中的equals()方法,如果父類中的檢測失敗(物件不相等),就說明物件不可能相等。如果檢測成功則在呼叫子類中的檢測方法。例如:
class Manager extends Employee{
int bounds;
//返回一個布林值,true表示相等,否則不相等
@Override
public boolean equals(Object otherobject){
if(!super.equals(otherobject)) return false;
Maanger other=(Maanger)otherobject;
return this.bounds==other.bounds;
}
}
2.hashCode方法:
hash code又稱為雜湊碼,是由物件到處的一個整型值。不同的物件的雜湊碼基本不會相同。
由於hashCode方法定義於Object類中,因此在使用者沒有重寫此方法之前,每個物件都有一個預設的雜湊碼,其值為物件的儲存地址。
有一點需要注意:字串的雜湊碼是由內容匯出的,String類重寫了hashCode方法,如下:
class String{
@Override
public int hashCode(){
int hash=0;
for(int i=0;i<length();i++){
hash=31*hash+charAt(i);
}
return hash;
}
}
注意:
Equals與hashCode的定義必須一致:如果x.equals(y)返回true,那麼x.hashCode()就必須與y.hashCode()具有相同的值。所以通常在上面的Employee類中加上:
@Override
public int hashCode(){
return Object.hash(name,salary,hireday);
}