day06-Object的幾個方法

Object類中的幾個方法

toString()

public String toString():返回該對象的字符串表示。
Object 類的 toString 方法返回一個字符串,該字符串由類名(對象是該類的一個實例)、at 標記符“@”和此對象哈希碼的無符號十六進制表示組成。換句話說,該方法返回一個字符串,它的值等於: getClass().getName() + '@' + Integer.toHexString(hashCode())

equals()

public boolean equals(Object obj):指示其他某個對象是否與此對象“相等”(默認不重寫情況)。
注意:當此方法被重寫時,通常有必要重寫 hashCode 方法,以維護 hashCode 方法的常規協定,該協定聲明相等對象必須具有相等的哈希碼。
==:
基本類型:比較的是值是否相等
引用類型:比較的就是地址值是否相同

hashCode()

public int hashCode():返回該對象的哈希碼值。

  • 注意:哈希值是根據哈希算法計算出來的一個值,這個值和地址值有關,但是不是實際地址值。可以理解爲地址值。
    public int hashCode()返回該對象的哈希碼值。支持此方法是爲了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。
hashCode 的常規協定是: 
	在 Java 應用程序執行期間,在對同一對象多次調用 hashCode 方法時,必須一致地返回相同的整數,前提是將對象進行 equals 比較時所用的信息沒有被修改。從某一應用程序的一次執行到同一應用程序的另一次執行,該整數無需保持一致。 
	如果根據 equals(Object) 方法,兩個對象是相等的,那麼對這兩個對象中的每個對象調用 hashCode 方法都必須生成相同的整數結果。 
	如果根據 equals(java.lang.Object) 方法,兩個對象不相等,那麼對這兩個對象中的任一對象上調用 hashCode 方法不 要求一定生成不同的整數結果。但是,程序員應該意識到,爲不相等的對象生成不同整數結果可以提高哈希表的性能。 
	實際上,由 Object 類定義的 hashCode 方法確實會針對不同的對象返回不同的整數。(這一般是通過將該對象的內部地址轉換成一個整數來實現的,但是 JavaTM 編程語言不需要這種實現技巧。) 

getClass()

public final Class<?> getClass():表示此對象運行時類的 Class 對象。
返回此 Object 的運行時類。返回的 Class 對象是由所表示類的 static synchronized 方法鎖定的對象。
Class類的方法:public String getName():以String的形式返回此Class對象所表示的全限定類名。

finalize()

protected void finalize() throws Throwable:當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法。子類重寫 finalize 方法,以配置系統資源或執行其他清除。

Object 類的 finalize 方法執行非特殊性操作;它僅執行一些常規返回。Object 的子類可以重寫此定義。
對於任何給定對象,Java 虛擬機最多隻調用一次 finalize 方法。
finalize 方法拋出的任何異常都會導致此對象的終結操作停止,但可以通過其他方法忽略它。

clone()

protected Object clone() throws CloneNotSupportedException:創建並返回此對象的一個副本。Object 類本身不實現接口 Cloneable,所以在類爲 Object 的對象上調用 clone 方法將會導致在運行時拋出異常。 所以要想使用此方法,就去實現Cloneable接口(這個接口沒有任何方法,像這種接口被稱爲標記接口)
CloneNotSupportedException - 如果對象的類不支持 Cloneable 接口,則重寫 clone 方法的子類也會拋出此異常,以指示無法複製某個實例。
clone()與使用等號賦值區別在於,clone是複製一個對象,原來對象的改變不會影響複製出來的對象;而等號賦值其實是使兩個變量指向同一個引用,所以當原對象發生變化時,另一個變量也會相應改變。

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