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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當我們有==運算符時為什么是equals()方法?

當我們有==運算符時為什么是equals()方法?

翻閱古今 2019-08-28 14:12:15
當我們有==運算符時為什么是equals()方法?當我看到equals()方法的實現時,它什么也沒做,只是做了什么==。所以我的問題是,當我們有==運營商做同樣的工作時,需要將它作為單獨的方法嗎?
查看完整描述

3 回答

?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

您不能重載==運算符,但equals(Object)如果您希望它與==運算符的行為不同,則可以覆蓋,即不比較引用但實際比較對象(例如,使用其全部或部分字段)。

此外,如果你覆蓋equals(Object),也看看hashCode()。這兩個方法需要兼容(即根據equals(Object)需要相同的兩個對象hashCode()),否則會發生各種奇怪的錯誤(例如,將對象添加到集合或映射時)。


查看完整回答
反對 回復 2019-08-28
?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

==比較對象引用,并詢問兩個引用是否相同。

equals()比較對象內容,并詢問對象是否代表相同的概念。


查看完整回答
反對 回復 2019-08-28
?
holdtom

TA貢獻1805條經驗 獲得超10個贊

在基元的情況下,==操作員檢查兩個值是否相同。

如果它不是基元,則檢查它是否是指向對象的同一實例的兩個指針(或引用)。


該equals()方法執行自定義檢查Object,通過使用檢查引用==。但在其他課程中,有時會equals()被覆蓋(我不知道這是否是正確的過去分詞)。equals()必須檢查內容。


所以,例如:


int i0 = 34;

int i1 = 34;

int i2 = 35;

// results

i0 == i1: true

i1 == i0: true

i2 == i0: false

但如果我們有非基元


String str0 = new String("Hello man!");

String str1 = new String("Hello man!");

String str2 = new String("!nam olleH");

String str2copy = str2;

// Results

str0 == str1: false // Pointer to two different object, so == will give false

str1 == str2: false // Idem

str2 == str2copy: true // So this are two pointers to the same object

str0.equals(str1): true // This are not the same objects, but they are equal

str1 == str1: true // Again: two times a pointer to the same  object

那么,為什么要str0.equals(str1)回歸true?因為String類具有覆蓋equals()。并且在該方法中,它不會通過執行來檢查它們是否相等return this == obj;但是在該方法中,存在完整的檢查。我不知道他們使用哪種方法來比較兩個字符串,但這里有兩種可能的方法:


從兩個字符串生成一個哈希碼并檢查它們是否相等(int == int)

如果字符相同,則逐字符檢查。

所以我希望現在很清楚。


查看完整回答
反對 回復 2019-08-28
  • 3 回答
  • 0 關注
  • 452 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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