Java Object類詳解:Object類的常用方法(equals()和getClass())

2020-07-16 10:05:16
Object 是 Java 類庫中的一個特殊類,也是所有類的父類別。當一個類被定義後,如果沒有指定繼承的父類別,那麼預設父類別就是 Object 類。因此,以下兩個類是等價的。
public class MyClass{…}
等價於
public class MyClass extends Object {…}

由於 Java 中的所有類都是由 Object 類派生出來的,因此在 Object 類中定義的方法,在其他類中都可以使用,常見的方法如表 1 所示。

表 1 Object類的常用方法
方法 說明
Object clone() 建立與該物件的類相同的新物件
boolean equals(Object) 比較兩物件是否相等
void finalize() 當垃圾回收器確定不存在對該物件的更多參照時,物件垃圾回收器呼叫該方法
Class getClass() 返回一個物件執行時的範例類
int hashCode() 返回該物件的雜湊碼值
void notify() 啟用等待在該物件的監視器上的一個執行緒
void notifyAll() 啟用等待在該物件的監視器上的全部執行緒
String toString() 返回該物件的字串表示
void wait() 在其他執行緒呼叫此物件的 notify() 方法或 notifyAll() 方法前,導致當前執行緒等待

其中,equals() 方法和 getClass() 方法在 Java 程式中比較常用。

equals() 方法

equals() 方法的作用與運算子類似,用於值與值的比較和值與物件的比較,而 equals() 方法用於物件與物件之間的比較,其使用格式如下:
boolean result = obj.equals(Object o);
其中,obj 表示要進行比較的一個物件,o 表示另一個物件。

例 1

編寫一個 Java 程式,實現使用者登入的驗證功能。要求,使用者從鍵盤輸入登入使用者名稱和密碼,當使用者輸入的使用者名稱等於 admin 並且密碼也等於 admin 時,則表示該使用者為合法使用者,提示登入成功,否則提示使用者名稱或者密碼錯誤資訊。

在這裡使用 equals() 方法將使用者輸入的字串與儲存 admin 的字串物件進行比較,具體的程式碼如下:
import java.util.Scanner;

public class Test01 {
    // 驗證使用者名稱和密碼
    public static boolean validateLogin(String uname, String upwd) {
        boolean con = false;
        if (uname.equals("admin") && upwd.equals("admin")) { // 比較兩個 String 物件
            con = true;
        } else {
            con = false;
        }
        return con;
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("------歡迎使用巨量資料管理平台------");
        System.out.println("使用者名稱:");
        String username = input.next(); // 獲取使用者輸入的使用者名稱
        System.out.println("密碼:");
        String pwd = input.next(); // 獲取使用者輸入的密碼
        boolean con = validateLogin(username, pwd);
        if (con) {
            System.out.println("登入成功!");
        } else {
            System.out.println("使用者名稱或密碼有誤!");
        }
    }
}
上述程式碼在 validateLogin() 方法中又使用 equals() 方法將兩個 String 型別的物件進行了比較,當 uname 物件與儲存 admin 的 String 物件相同時,uname.equals("admin") 為 true;與此相同,當 upwd 物件與儲存 admin 的 String 物件相同時,upwd.equals("admin") 為 true。當使用者輸入的使用者名稱和密碼都為 admin 時,表示該使用者為合法使用者,提示登入成功資訊,否則提示使用者名稱或密碼有誤的錯誤資訊。

該程式的執行結果下所示:
------歡迎使用巨量資料管理平台------
使用者名稱:
adinm
密碼:
admin
使用者名稱或密碼有誤!
------歡迎使用巨量資料管理平台------
使用者名稱:
admin
密碼:
admin
登入成功!

getClass() 方法

getClass() 方法返回物件所屬的類,是一個 Class 物件。通過 Class 物件可以獲取該類的各種資訊,包括類名、父類別以及它所實現介面的名字等。

例 2

編寫一個範例,演示如何對 String 型別呼叫 getClass() 方法,然後輸出其父類別及實現的介面資訊。具體實現程式碼如下:
public class Test02 {
    public static void printClassInfo(Object obj) {
        // 獲取類名
        System.out.println("類名:" + obj.getClass().getName());

        // 獲取父類別名
        System.out.println("父類別:" + obj.getClass().getSuperclass().getName());
        System.out.println("實現的介面有:");

        // 獲取實現的介面並輸出
        for (int i = 0; i < obj.getClass().getInterfaces().length; i++) {
            System.out.println(obj.getClass().getInterfaces()[i]);
        }
    }

    public static void main(String[] args) {
        String strObj = new String();
        printClassInfo(strObj);
    }
}
該程式的執行結果如下:
類名:java.lang.String
父類別:java.lang.Object
實現的介面有:
interface java.io.Serializable
interface java.lang.Comparable
interface java.lang.CharSequence