1. 程式人生 > 實用技巧 >Object類以及Object類中常用方法解讀

Object類以及Object類中常用方法解讀

Object類概述

類 Object 是類層次結構的根類。每個類都使用 Object 作為超類。所有物件(包括陣列)都實現這個類的方法。

簡單來說就是,Object類是所有類的父類,包括我們所寫的類,我們在使用類的時候就會利用Object類中的方法

Test類和Test1類都繼承於Object頂層父類。

Object的意義

既然Java中所有的類都繼承Object,繼承的意義就是繼承其中的成員方法,Java將許多我們常用的方法都封裝在了Object類中,這樣我們的其他類都可以直接繼承這些方法並且在類中所建立的物件(引用資料型別)可以直接呼叫這些方法。
比如我們現在建立一個數組“arr”,看看“arr”可以調動哪些方法:

我們會發現有許多可以呼叫的方法並不是我們自己建立的成員方法,那意味著這些方法是來自本類所繼承的父類,也就是Object。

Object中的構造方法

回想面向物件中說到,子類的構造方法預設訪問的是父類中的無參構造,對父類的資料進行初始化,所以Object類中具有預設的無參構造Object() 。


現在我們瞭解瞭如何直接呼叫Object類中已經封裝的功能,那麼現在介紹具體的我們常用的幾個方法,也就是在Java中開發過程中的常用物件

hashCode()方法

方法體為public int hashCode()
支援此方法是為了提高雜湊表(例如 java.util.Hashtable 提供的雜湊表)的效能。


我們發現hashCode方法返回值型別為int型別,所以我們建立int變數來體現返回值,具體作用的演示:

hashCode(): 返回一個物件的雜湊碼值
意思就是把物件的地址值換算成一個整數值,當兩個物件不是同一物件,其地址值不同,雜湊碼值也不一樣。

相反,同一物件的雜湊碼值肯定相同

getClass()方法

方法體為public final Class<?> getClass()
當我們類的class檔案載入進記憶體後,JVM 就會為 .class檔案建立一個物件。我們可以通過getClass()方法來獲取這個物件。

此時我們調取的就是Test類的Test.class檔案的物件。

那麼也說明,同一個類建立不同的物件,用這些物件通過getClass()方法調出的物件,其實都是由同一個class檔案建立的,他們的地址值以及雜湊碼值都是一樣的。

toString()方法

方法體為

public String toString() { //返回值為字串型別
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

toString()的做作用是返回該物件的字串表示。通常,toString 方法會返回一個“以文字方式表示”此物件的字串表示式。

但是通常在我們開發過程中並不會有需要用到這種字串的情況,所以toString方法我們建議所有子類重寫來呼叫,使其結果是一個簡明而且易於讀懂的資訊表示式。 現在我們定義一個學生類,給予成員變數姓名和年齡:

我們測試這個類,建立該類物件student,並運用toString方法,執行結果是該物件的字串形式。

我們現在在學生類中重寫toString方法,使其返回的不再是物件地址值的字串形式,而是物件中成員變數的具體內容(toString方法的重寫在JDK中可以通過快捷鍵Alt+Insert實現

這時測試類中執行結果就是我們想要的另一種更簡單易懂的表達結果:

equals()方法

方法體為

public boolean equals(Object obj) { //返回值為布林型別
        return (this == obj);
    }

作用是指示其他某個物件是否與此物件“相等”。,也就是比較兩個物件的地址值是否相等,是否為同一物件。如果相等則返回true,不相等則返回false。

當然通常,我們比較兩個物件是否為一個物件顯然毫無意義。所以,我們更多的希望比較兩個物件的成員變數值是否一樣,一樣則返回true,不一樣則返回false。所以,我們通常也會對equals方法進行重寫。 依然建立一個學生類,給予成員變數姓名和年齡:

測試這個類,建立兩個該類物件student1和student2,並運用equals方法來比較兩個物件地址值是否相等:

執行結果當然為false,現在我們在學生類中重寫equals方法,使其比較的是兩個物件的成員變數值是否相等(equals方法的重寫在JDK中可以通過快捷鍵Alt+Insert實現):

參考:你知道Object中有哪些方法及其作用嗎?