equals方法真心看不懂 哪位好心人講解下
方法的()里的實參為什么是Object obj呀 Object是類型嗎?實參不是具體的值嗎
第三個if中g(shù)etcalss()!=obj。getcalss() 左邊是得到的類對象嗎 右邊呢?
最后dog other=(dog)obj視頻說是轉(zhuǎn)換類型 搞不懂 前面沒見過這個呀
方法的()里的實參為什么是Object obj呀 Object是類型嗎?實參不是具體的值嗎
第三個if中g(shù)etcalss()!=obj。getcalss() 左邊是得到的類對象嗎 右邊呢?
最后dog other=(dog)obj視頻說是轉(zhuǎn)換類型 搞不懂 前面沒見過這個呀
2016-10-10
舉報
2016-10-10
逐一作答了
Object是java中所有類的父類,所以()中的Object obj的意思就是傳入一個Object類型的obj引用,這里是形參,但你使用的時候肯定傳入的是具體的對象變量了啊
getClass()是反射方法,功能是得到當(dāng)前對象的類,這行代碼的意思就是判斷當(dāng)前對象的類是否與傳入的obj對象引用同屬一個類型,如果不是就沒有必要比較其成員變量屬性值了,直接返回false;
Dog other = (Dog)obj;是屬于強制類型轉(zhuǎn)換,因為本方法中傳入的是Object對象引用,但我們比較的是Dog對象而且我們靜態(tài)getClass方法已經(jīng)可以確認(rèn)該obj引用對象實際上是一個Dog對象,所以這時候為了比較對象之間的成員變量屬性值是否相同(封裝性的原因,父類對象引用無法使用子類對象的屬性),我們就要將傳入的obj進(jìn)行強制類型轉(zhuǎn)換,即向下轉(zhuǎn)型為Dog對象
不用太糾結(jié)這些,弄明白equals方法的原理就行了,反射以后會慢慢學(xué)到的
默認(rèn)的Object的equals方法的實現(xiàn)是比較當(dāng)前對象的引用和要比較的引用是否指向同一個對象,我們平時使用的時候經(jīng)常需要重寫equals方法使它能比較對象的“值”是否相等,明白這一點就可以向下進(jìn)行了!
純手打,望采納