1. 程式人生 > >Java中所有類的超類Object

Java中所有類的超類Object

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