你應(yīng)該學(xué)會的Java源碼學(xué)習(xí)

你應(yīng)該學(xué)會的Java源碼學(xué)習(xí)

深圳達內(nèi)教育      2022-03-07 02:20:01     26

你應(yīng)該學(xué)會的Java源碼學(xué)習(xí),equals源碼分析?????public?boolean?equals(Object?obj)?{????????return?(this?==?obj);????}上面簡單

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細介紹

equals源碼分析    

?????public?boolean?equals(Object?obj)?{????????return?(this?==?obj);????}

上面簡單的三行代碼就是Object類中equals的源碼。主要的比較是兩個對象的地址??梢钥吹?,方法體中equals比較其實也是“==”實現(xiàn)的。因此,下次在面試的過程中,你遇見問equals與“==”的區(qū)別的時候,你先給出結(jié)論。==是比較兩個對象地址的,沒有重寫equals方法的實體類使用equals也是比較地址的。

那么我們經(jīng)常用String中equals為什么是比較值的呢?接下來我們看一下String類中equals的源碼

String中equals方法源碼分析

   

????public?boolean?equals(Object?anObject)?{??????//可以看到,String中重新的equals方法在第一步就進行了地址比較,??????//如果兩個字符串的地址相等,那么他們的值一定相等,就不用去進行下面的值比較了????????if?(this?==?anObject)?{????????????return?true;????????}??????//這個if表示,如果equals的方法體中不是一個String類型,那么也就直接返回為false??????//比如“蜜蜂攻城獅????????if?(anObject?instanceof?String)?{????????????String?anotherString?=?(String)anObject;????????????int?n?=?value.length;????????????if?(n?==?anotherString.value.length)?{????????????????char?v1[]?=?value;????????????????char?v2[]?=?anotherString.value;????????????????int?i?=?0;????????????????while?(n--?!=?0)?{????????????????????if?(v1[i]?!=?v2[i])????????????????????????return?false;????????????????????i++;????????????????}????????????????return?true;????????????}????????}????????return?false;????}

在我們實際編寫代碼的時候,特別是一些需要重寫equals方法的實體類的時候,那么我們需要進行equals的方法重寫,重寫equals方法需要遵守如下約定。翻譯如下

(1)自反性:x.equals(x)必須返回true。

(2)對稱性:x.equals(y)與y.equals(x)的返回值必須相等。

(3)傳遞性:x.equals(y)為true,y.equals(z)也為true,那么x.equals(z)必須為true。

(4)一致性:如果對象x和y在equals()中使用的信息都沒有改變,那么x.equals(y)值始終不變。

(5)非null:x不是null,y為null,則x.equals(y)必須為false。

以上就是深圳達內(nèi)教育java培訓(xùn)機構(gòu)的小編針對“你應(yīng)該學(xué)會的Java源碼學(xué)習(xí)”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。

培訓(xùn)啦提醒您:交易時請核實對方資質(zhì),對于過大宣傳或承諾需謹慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險,謹防上當。