1. 程式人生 > >Object類下的方法總結

Object類下的方法總結

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

經常會用到的方法

  1. equals

    equals用於指示其他某個物件是否與此物件“相等”。
    在Object類中equals的方法體是

public boolean equals(Object obj) {
        return (this == obj);
    }

我們知道“==”在用於兩個物件比較的時候比較的是兩個物件的記憶體地址,所以在Object類下equals方法比較的是記憶體地址。
在String類中的equals的方法體是

 public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char
v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return
false; }

研究String類中的equals方法體可以看到
第一步:使用“==”比較兩個物件的地址,地址若是一樣,那麼兩個物件的值也肯定相等,直接返回true,否則進入下一步;
第二步:使用instanceof方法檢視傳入物件anObject是否是String類的物件,結果為真就進入下一步的比較,否則直接返回false;
第三步:在驗證傳入物件anObject為String類物件後,將anObject強制轉換為String型別(其實我總覺得這個有點畫蛇添足,第二步已經驗證過了為什麼還要強制轉換,可能有什麼我沒有考慮到的地方把,畢竟是Java官方程式碼)。比較當前物件與傳入物件的長度,若兩物件的長度不等,返回false,若長度相等則進入下一步比較;
第四步:將兩個String類物件存入Char陣列中,之後逐個比較兩個陣列中的值,最後驗證兩個字串是否相等。

2.hashCode()
返回該物件的雜湊碼值 。預設情況下,該方法會根據物件的地址來計算。不同物件的hashCode()一般來說不會相同(也就是說二般情況下會相同,看了會資料有點蒙,先不管這個)。但是同一個物件的hashCode()值肯定相同。

System.out.println("該物件的雜湊碼值是:"+p1.hashCode());
該物件的雜湊碼值是:2018699554

3.toString()
返回該物件的字串表示

System.out.println("toString方法輸出物件的字串表示:"+p1.toString());
toString方法輸出物件的字串表示:com.hwadee.day0115.practice@7852e922

toString方法輸出的是包名.類名[email protected]+地址值

可以看到兩個方法都會輸出一個地址值,兩個值是可以相互轉換的

System.out.println("將hashcode值轉換為toString中的地址值:  "+Integer.toHexString(p1.hashCode()));

將hashcode值轉換為toString中的地址值:  7852e922

執行緒中用到的方法

  1. void notify()
    喚醒在此物件監視器上等待的單個執行緒。
  2. void notifyAll()
    喚醒在此物件監視器上等待的所有執行緒。
  3. void wait()
    在其他執行緒呼叫此物件的 notify() 方法或 notifyAll() 方法前,導致當前執行緒等待。

其他不常用到的方法

  1. protected Object clone()
    建立並返回此物件的一個副本。
  2. protected void finalize()
    當垃圾回收器確定不存在對該物件的更多引用時,由物件的垃圾回收器呼叫此方法。
  3. Class
System.out.println("getClass()輸出"+p1.getClass());
System.out.println("p1.getClass().getName(): "+p1.getClass().getName());
getClass()輸出:  class com.hwadee.day0115.practice
p1.getClass().getName()輸出:  com.hwadee.day0115.practice