1. 程式人生 > >一、Object常用方法(瞭解)

一、Object常用方法(瞭解)

一、Object常用方法(瞭解)

1、Object類的hashCode()方法

    * 原始碼:public native int hashCode()      native的意思本地,藉助本地系統資源算了值,比如我們的虛擬機器是在Windows上跑的。
    * a:返回該物件的雜湊碼值。預設情況下,該方法會根據物件的地址來計算。
    * b:不同物件的,hashCode()一般來說不會相同。但是,同一個物件的hashCode()值肯定相同。

2、Object類的getClass()方法(在反射的時候掌握)

    * public final Class getClass()          返回Class包含類的成員變數和成員方法,

       Students students = new Students();

        Class clazz = students.getClass() ;    通過物件獲取該物件的位元組碼檔案
    * a:返回此 Object 的執行時類。
    * b:可以通過Class類中的一個方法,獲取物件的真實類的全名稱。    
        * public String getName()  如:clazz.getName()   ==> 類的全名稱

3、Object類的toString()方法

    * 原始碼:

        public Stirng toString() {
            return getClass().getName() + "@" + Integer.toHexString(hashCode()) ;
        }
    * a:由於預設情況下的資料對我們來說沒有意義,一般建議重寫該方法。  
    * b:如果直接列印物件的引用,會預設調toString()方法。 

4、Object類的equals()方法

    * 原始碼:

        public boolean equals(Object obj)

         { return (this == obj);    

    * a:指示其他某個物件是否與此物件“相等”。 
    * b:預設情況下比較的是物件的引用是否相同。
    * c:由於比較物件的引用沒有意義,一般建議重寫該方法。

@Override
public boolean equals(Object o) {//equals底層也用的是==
    if (this == o) return true;//比較物件地址值
    if (o == null || getClass() != o.getClass()) return false;
    Student student = (Student) o;//向下轉型,多型弊端,不能訪問子類特有的屬性和行為
    return age == student.age &&
            Objects.equals(name, student.name);
}

總結:==號和equals方法的區別(掌握)
* ==是一個比較運算子號,既可以比較基本資料型別,也可以比較引用資料型別,基本資料型別比較的是值,引用資料型別比較的是地址值
* equals方法是一個方法,只能比較引用資料型別,所有的物件都會繼承Object類中的方法,如果沒有重寫Object類中的equals方法,equals方法和==號比較引用資料型別無區別,重寫後的equals方法比較的是物件中的屬性