Object類詳解

Object

通用方法

/**
 * native 方法,用于返回當(dāng)前運行時對象的 Class 對象,使用了 final 關(guān)鍵字修飾,故不允許子類重寫。
 */
public final native Class<?> getClass()
/**
 * native 方法,用于返回對象的哈希碼,主要使用在哈希表中,比如 JDK 中的HashMap。
 */
public native int hashCode()
/**
 * 用于比較 2 個對象的內(nèi)存地址是否相等,String 類對該方法進(jìn)行了重寫以用于比較字符串的值是否相等。
 */
public boolean equals(Object obj)
/**
 * naitive 方法,用于創(chuàng)建并返回當(dāng)前對象的一份拷貝。
 */
protected native Object clone() throws CloneNotSupportedException
/**
 * 返回類的名字實例的哈希碼的 16 進(jìn)制的字符串。建議 Object 所有的子類都重寫這個方法。
 */
public String toString()
/**
 * native 方法,并且不能重寫。喚醒一個在此對象監(jiān)視器上等待的線程(監(jiān)視器相當(dāng)于就是鎖的概念)。如果有多個線程在等待只會任意喚醒一個。
 */
public final native void notify()
/**
 * native 方法,并且不能重寫。跟 notify 一樣,唯一的區(qū)別就是會喚醒在此對象監(jiān)視器上等待的所有線程,而不是一個線程。
 */
public final native void notifyAll()
/**
 * native方法,并且不能重寫。暫停線程的執(zhí)行。注意:sleep 方法沒有釋放鎖,而 wait 方法釋放了鎖 ,timeout 是等待時間。
 */
public final native void wait(long timeout) throws InterruptedException
/**
 * 多了 nanos 參數(shù),這個參數(shù)表示額外時間(以毫微秒為單位,范圍是 0-999999)。 所以超時的時間還需要加上 nanos 毫秒。。
 */
public final void wait(long timeout, int nanos) throws InterruptedException
/**
 * 跟之前的2個wait方法一樣,只不過該方法一直等待,沒有超時時間這個概念
 */
public final void wait() throws InterruptedException
/**
 * 實例被垃圾回收器回收的時候觸發(fā)的操作
 */
protected void finalize() throws Throwable { }

==和equals()詳解

==

== 對于基本類型和引用類型的作用效果是不同的:
對于基本數(shù)據(jù)類型來說,== 比較的是值。
對于引用數(shù)據(jù)類型來說,== 比較的是對象的內(nèi)存地址。

equals()

未重寫:通過equals()比較該類的兩個對象時,等價于通過“==”比較這兩個對象,使用的默認(rèn)是 Object類equals()方法。
重寫::一般我們都重寫 equals()方法來比較兩個對象中的屬性是否相等;若它們的屬性相等,則返回 true(即,認(rèn)為這兩個對象相等)。

hashCode()

hashCode() 的作用是獲取哈希碼(int 整數(shù)),也稱為散列碼。這個哈希碼的作用是確定該對象在哈希表中的索引位置。
hashCode()定義在 JDK 的 Object 類中,這就意味著 Java 中的任何類都包含有 hashCode() 函數(shù)。另外需要注意的是: Object 的 hashCode() 方法是本地方法,也就是用 C 語言或 C++ 實現(xiàn)的,該方法通常用來將對象的內(nèi)存地址轉(zhuǎn)換為整數(shù)之后返回。

hashcode()和equals()愛恨交織

基本概念:

hashCode()equals()都是用于比較兩個對象是否相等。

提供兩種方法的意義:

在一些容器(比如 HashMap、HashSet)中,有了 hashCode() 之后,判斷元素是否在對應(yīng)容器中的效率會更高(參考添加元素進(jìn)HashSet的過程)!如果 HashSet 在對比的時候,同樣的 hashCode 有多個對象,它會繼續(xù)使用 equals() 來判斷是否真的相同。也就是說 hashCode 幫助我們大大縮小了查找成本。

兩者缺少時的情況:

兩者判斷為true/false的情況:

  • 如果兩個對象的hashCode 值相等,那這兩個對象不一定相等(哈希碰撞)。
  • 如果兩個對象的hashCode 值相等并且equals()方法也返回 true,我們才認(rèn)為這兩個對象相等。
  • 如果兩個對象的hashCode 值不相等,我們就可以直接認(rèn)為這兩個對象不相等。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、clone()方法 保護(hù)方法,實現(xiàn)對象的淺復(fù)制,只有實現(xiàn)了Cloneable接口才可以調(diào)用該方法,否則拋出Cl...
    福later閱讀 509評論 0 0
  • Object是所有類的父類,任何類都默認(rèn)繼承Object。Object是類層次結(jié)構(gòu)的根類。每個類都使用Object...
    一一一二二三閱讀 5,141評論 0 3
  • 簡述 Object 方法包括 5 個非 final 類型的方法,分別是:clone、hashCode、equals...
    孫廣明閱讀 698評論 0 0
  • Object位于java.lang中,以大眾父親聞名,是java所有類的父類,數(shù)組也繼承了Object,不過,接口...
    kindol閱讀 519評論 0 0
  • 方法摘要 protected Object clone() 創(chuàng)建并返回此對象的一個副本。boolean equal...
    林亞希閱讀 511評論 0 0

友情鏈接更多精彩內(nèi)容