JAVA常用api — Object詳解

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 返回truex.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代碼塊中使用。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章