1. 程式人生 > 實用技巧 >Object 類有哪些方法?

Object 類有哪些方法?

equals:檢測物件是否相等,預設使用 == 比較物件引用,可以重寫 equals 方法自定義比較規則。equals 方法規範:自反性、對稱性、傳遞性、一致性、對於任何非空引用 x,x.equals(null) 返回 false。

hashCode:雜湊碼是由物件匯出的一個整型值,沒有規律,每個物件都有預設雜湊碼,值由物件儲存地址得出。字串雜湊碼由內容匯出,值可能相同。為了在集合中正確使用,一般需要同時重寫 equals 和 hashCode,要求 equals 相同 hashCode 必須相同,hashCode 相同 equals 未必相同,因此 hashCode 是物件相等的必要不充分條件。

toString:列印物件時預設的方法,如果沒有重寫列印的是表示物件值的一個字串。

clone:clone 方法宣告為 protected,類只能通過該方法克隆它自己的物件,如果希望其他類也能呼叫該方法必須定義該方法為 public。如果一個物件的類沒有實現 Cloneable 介面,該物件呼叫 clone 方***丟擲一個 CloneNotSupport 異常。預設的 clone 方法是淺拷貝,一般重寫 clone 方法需要實現 Cloneable 介面並指定訪問修飾符為 public。

使用方法:

public class User implements Cloneable{
    @Override
    
protected Object clone() throws CloneNotSupportedException { return new User(); } private String uid; private String uName; } public static void main(String[] args) throws CloneNotSupportedException { User u1 = new User(); User u2 = (User)u1.clone(); System.out.println(u1
== u2); }

finalize:確定一個物件死亡至少要經過兩次標記,如果物件在可達性分析後發現沒有與 GC Roots 連線的引用鏈會被第一次標記,隨後進行一次篩選,條件是物件是否有必要執行 finalize 方法。假如物件沒有重寫該方法或方法已被虛擬機器呼叫,都視為沒有必要執行。如果有必要執行,物件會被放置在 F-Queue 佇列,由一條低排程優先順序的 Finalizer 執行緒去執行。虛擬機器會觸發該方法但不保證會結束,這是為了防止某個物件的 finalize 方法執行緩慢或發生死迴圈。只要物件在 finalize 方法中重新與引用鏈上的物件建立關聯就會在第二次標記時被移出回收集合。由於執行代價高昂且無法保證呼叫順序,在 JDK 9 被標記為過時方法,並不適合釋放資源。

getClass:返回包含物件資訊的類物件。

wait / notify / notifyAll:阻塞或喚醒持有該物件鎖的執行緒。