Object類的概述
- 類 Object 是類層次結(jié)構(gòu)的根類棱烂。
- 每個(gè)類都使用 Object 作為超類酱塔。
- 所有的類都直接或者間接的繼承自O(shè)bject類夹供。
Object類的方法
-
public int hashCode()
- 返回該對(duì)象的哈希碼值。默認(rèn)情況下桩砰,該方法會(huì)根據(jù)對(duì)象的地址來計(jì)算阶捆。
- 不同對(duì)象的凌节,hashCode()一般來說不會(huì)相同。但是洒试,同一個(gè)對(duì)象的hashCode()值肯定相同倍奢。
- 不是對(duì)象的實(shí)際地址值,可以理解為邏輯地址值垒棋。
-
public final Class getClass()
- 返回此 Object 的運(yùn)行時(shí)類卒煞。
- 可以通過Class類中的一個(gè)方法,獲取對(duì)象的真實(shí)類的全名稱捕犬。
- public String getName():以 String 的形式返回此 Class 對(duì)象所表示的實(shí)體
-
public String toString()
- 返回該對(duì)象的字符串表示跷坝。
//底層源碼。 public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); }
- 它的值等于:getClass().getName() + ‘@’ + Integer.toHexString(hashCode())
- 由于默認(rèn)情況下的數(shù)據(jù)對(duì)我們來說沒有意義碉碉,一般建議重寫該方法。a:手動(dòng)重寫b:自動(dòng)生成
- 注意:直接輸出一個(gè)對(duì)象的名稱淮韭,其實(shí)就是調(diào)用該對(duì)象的toString()方法垢粮。
- **public boolean equals(Object obj)**
- 指示其他某個(gè)對(duì)象是否與此對(duì)象“相等”。 (**下面有詳細(xì)講解**)
- **protected void finalize()**
- 當(dāng)垃圾回收器確定不存在對(duì)該對(duì)象的更多引用時(shí)靠粪,由對(duì)象的垃圾回收器調(diào)用此方法蜡吧。
- 垃圾回收器不會(huì)馬上回收垃圾,但是我們可以建議它盡快回收垃圾占键。(System.gc()方法)
- 主要針對(duì)堆內(nèi)存昔善。
- **protected Object clone()**
- 創(chuàng)建并返回此對(duì)象的一個(gè)副本,這種克隆機(jī)制十分高效畔乙,而且二者之間完全隔離君仆。
- 自定義類實(shí)現(xiàn)克隆步驟:
- 自定義類實(shí)現(xiàn)Cloneable接口,這是一個(gè)標(biāo)記性接口牲距,實(shí)現(xiàn)這個(gè)接口的類的對(duì)象可以實(shí)現(xiàn)自我克隆返咱。
- 自定義類中重寫Object類的clone()方法。
- 重寫clone()方法時(shí)通過super.clone()調(diào)用Object類的clone()方法來得到該對(duì)象的副本牍鞠,并返回該副本。
> 這里我們?cè)賮碓敿?xì)說一下public boolean equals(Object obj)這個(gè)方法
- 這個(gè)方法,默認(rèn)情況下比較的是地址值盏道。比較地址值一般來說意義不大,所以我們要重寫該方法吐句。
- 一般都是用來比較對(duì)象的成員變量值是否相同。
那么 **==** 和 **equals**有什么區(qū)別呢店读?
> **==:** 基本類型:比較的就是值是否相同引用類型:比較的就是地址值是否相同**equals:** 引用類型:默認(rèn)情況下嗦枢,比較的是地址值。不過两入,我們可以根據(jù)情況自己重寫該方法净宵。一般重寫都是自動(dòng)生成,比較對(duì)象的成員變量值是否相同(可以看上面代碼的舉例)