1. 程式人生 > >JAVA-初步認識-第十一章-object類-equals方法

JAVA-初步認識-第十一章-object類-equals方法

行修改 color 我們 兩個 例子 初步 是我 地方法 成了

一.

接下來介紹一個特殊的對象,學完繼承,多態,將要講到的,之前也接觸過。

技術分享圖片

之前談論的繼承體系子父類中,一直存在super()調用父類,父類中也有一個super()調用object。現在就是討論object對象。

object是java中所有對象的根類,不是直接的就是間接,間接就是在不斷地繼承,下面不斷地復制上面的父類。即使一個程序中不做繼承,系統仍然有一個繼承,就是和object構上關系。

技術分享圖片

這個object是怎麽來的呢?java是由對象構成的,對象的共性向上抽取,不斷地抽取,最終形成了object類。

技術分享圖片

這意味著object類中的方法,所有對象都能用。

二.

現在簡單介紹一下object類,包括類裏面的內容。

object類中有object構造方法,它沒有父類的構造方法,這是最終的類。→所有的類裏面都有構造函數。

object類中還有許多定義好的方法,(我覺著這些是固有的,屬於系統的),這些方法先介紹一部分,方便後面我們後面應用。

首先,介紹的方法是equals(object obj)方法。視頻中此方法是比較兩個對象是否“相等”。我們管不了怎麽來評判相等,但是相等的標準是什麽?這裏說結果的類型是boolean類型,說明什麽函數是一種運算手段,最後是為了得到結果。我們運用函數來處理數據,最後得到結果。→這是我對函數的理解。

技術分享圖片

equals(object obj)方法的參數列表是單個形參。為什麽參數是一個,因為本對象調用,和輸入的另一對象進行比較,有一個對象是確定好的。對於形參的輸入還有一個很重要的知識點

,只是比較對象是否相等,至於對象是什麽類型是不做限制的,因此用object來表示其類型,這就是多態的體現,對象本身肯定不是object類型。

現在舉一個例子,來展現equals()方法的運用。

技術分享圖片

(這裏有一點疑問,==和equals()方法到底有什麽不同?一個是運算符,另一個是功能函數,兩者是不太一樣,但貌似都是運算操作。)

這兩種是否相同,最直接的是通過編譯運行來檢驗。

技術分享圖片

技術分享圖片

兩者都是錯誤,上面截圖中交代了對象相等是什麽意思,就是一個對象。也就是多引用指向同一對象。截圖中的比較對象相等到底所的是==,還是equals()方法兩個方法說的相等到底是什麽,目前還沒理解深入。我個人的理解是,==代表的是比較對象的地址編號。equals()代表的是比較兩個對象的內容。

這時候,修改程序,再次運行,看看這兩個方法。

技術分享圖片

技術分享圖片

依據視頻的講解來看,兩個方法比較的都是對象的地址編碼。那為什麽設置兩個功能一樣的東西呢?難道就是因為一個是簡寫,一個是函數的形式

為什麽比較對象,比較的是編碼地址?我覺著對象的內容很多樣,很難去逐一對比,不如直接比較整個對象的地址比較容易,要麽一樣,要麽不同。→個人理解。

為什麽equals()方法比較的對象地址,有什麽依據麽?

看一下object類的源代碼

技術分享圖片

static共享的,private私有的,native是本地的意思,native是說明這是本地方法,有這個修飾意味著,這個方法的主題內容,你是不需要知道的,也不會給你知道。這個方法的主體內容,最後會轉換成調用底層c的代碼,會調用系統內容,所以這個就是本地方法,它就存放在本地方法區當中。這個方法你調用不了,你也不可能調用。

上面截圖中的第二句是靜態代碼塊,隨著類的加載就執行了,它執行的就是“向本地註冊”,registerNative,要把這個根類註冊到本地系統上。這就是這個類一加載,就必須執行,而不管這個類創不創建對象。這就是靜態代碼塊的應用,這叫做直接完成註冊動作,至於產不產生對象不用管,類加載必須要先做,不先做就晚了。

往下看,這裏面有很多本地方法。(native的存在)

技術分享圖片

本地方法怎麽實現的,我們是不知道的,這依賴於系統,系統不同,它會調用現有的系統來實現自己。

技術分享圖片

這裏有equals方法,當前對象和指定對象進行比較。方法體中用的是==,因此它和==是一樣的。這就是我們說的equals方法為什麽比較的是地址編碼。它為了能夠接收更多的對象進來,它就使用的是object作為參數,擴大類型。用==有限制,

再次對程序進行修改,來加深對代碼的理解,

技術分享圖片

這裏傳入Demo類的d,因為equals方法形參設置成object類,擴大了對象類型,所以d也是可以的。

JAVA-初步認識-第十一章-object類-equals方法