Object詳解
Object類中的常用方法分別是:getClass() ; hashCode() ; equals(Object); toString(); notify(); notityAll(); wait(long); wait(long,int); wait(); finalize();
他們分別的作用如下:
1. getClass() :獲取該對象的類類型,其返回類型爲Class<?>類,常用語Java反射機制。
2.hashCode() : 返回對象的哈希碼值,哈希碼存在的好處很多,有查找的快捷性,例如HashMap或HashTable等均採用key的hashCode來確定其對象的存儲位置;判斷對象是否相同,如果兩個對象相等,那麼這兩個對象計算出的哈希值也要相等,實際使用場景中我們採用equals來判斷對象是否相等,如果我們自定義的類中重新寫了equals方法,則也要同時重寫掉hashCode方法。
另外,上面說的一句話:如果兩個對象相等,則這兩個對象的哈希值一定相等,這句話反過來說則不一定成立,如果兩個對象的哈希值相等,那麼這兩個對象不一定相等。
3.equals(Object):用於比較兩個對象是否相等。在Object中的equals方法的判斷,僅當被比較的對象所指向的實例爲同一個,即返回地址相同,則equals返回true,否則返回false。看過源碼可以知道,這個比較實際上也就是object1==object2,和“==”達到的效果一樣,但在實際場景中,很多類會根據實際需要去重寫該方法,如常見的String便重寫了該方法,切記如果重寫了euqals方法,hashCode()方法也要一起重寫。
4.clone() : 複製一個對象,官方註釋中,給出了一個說明:x.clone() != x 返回true;x.clone().getClass() == x.getClass() 返回true,但不是一定的;x.clone().equals(x) 返回true,但不是一定的;根據實際場景需要,我們可以重寫clone()方法,但要需要實現Cloneable接口;另外,Object.clone()方法屬於淺層複製,實際運用時一定要注意。
這裏同時引申出了深層複製和淺層複製的概念。
5.toString() : Object中默認輸出是類名@hashcode值。實際應用場景中,可根據實際情況確定是否需要重寫該方法,可以對對象進行自定義的格式輸出。
6.notify() :喚醒正在等待該對象鎖的一個線程。
7.notifyAll() :喚醒正在等待該對象鎖的所有進行。
8.wait() : 釋放當前線程中該對象的對象鎖,進入對象等待池,等待被喚醒;
注: notify()、notifyAll()、wait()方法需要在synchronized代碼塊中使用。