亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

equals里面的equals為啥work?

重寫equals方法,最后一個if判斷:if (this.name.equals(cr.name)) 這里用到的equals方法是原始的么?為什么這兩個名字的判斷會給出true的可能,按原始定義,兩個不一樣的對象不是應該返回false么,即使內容一樣?

正在回答

2 回答

你的理解一部分對,一部分不恰當。

其實就是String是簡單的引用類型,所以用equals時,程序內部知道去判斷兩個字符串中的一系列字符是否一樣,從而得到判斷結果,但是遇到一個復雜點的對象,計算機不知道我們認定的“相同”的判斷規則,所以需要我們覆寫這個equals方法。想想如果各種類型都能夠判斷的話,計算機需要做的工作太復雜了。比如一個對象有十個屬性,他就需要去分別比較每個屬性的值,如果每個屬性又都是復雜的類型,那比較工作就一套嵌一套,沒完沒了了。效率是不是很低呢?所以根據用戶需求自己去覆寫是最好的了。

equals:判斷值是否相同。

? ==??? :判斷地址是否相同。

對于String類型的,如果你利用他的構造函數創建String對象,即使兩個值相同,用==也是不相等滴!他們兩個本質上是不一樣的奧~

0 回復 有任何疑惑可以回復我~
#1

紅袖侍讀 提問者

謝謝補充說明,非常感謝!
2016-06-22 回復 有任何疑惑可以回復我~
#2

helloworld2008 回復 紅袖侍讀 提問者

嘿嘿。共同進步~
2016-06-23 回復 有任何疑惑可以回復我~

是原始的
對象之間的判斷是用==號,而equals方法是用來判斷字符串中的內容是否相等。

不知對否,第一次回答問題。

0 回復 有任何疑惑可以回復我~
#1

紅袖侍讀 提問者

equas當然也用來判斷對象啊,不然為什么要重寫呢。這個道理我已經明白了,equals如果判斷基本簡單類型,像字符串這種,是能給出準確判斷的, 所以if (this.name.equals(cr.name)) 這條語句執行結果是正確沒問題的,只有碰到類對象這種復雜類型,才需要重寫,因為原始的equals和==號一樣,對類對象來說只能判斷二者在內存中的地址而非內容,當我們需要對對象里的內容判斷是否一致時它們都只能給出false的結果,因此這種情況下必須對equals重寫,而==號就沒轍了,似乎沒有別的辦法讓==號判斷類對象內容的一致
2016-06-15 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

equals里面的equals為啥work?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號