課程
/后端開發(fā)
/Java
/Java入門第二季 升級版
首先equals和==的區(qū)別是什么?
然后重載Object后,equals和==的意義會改變嗎?
2017-05-11
源自:Java入門第二季 升級版 9-9
正在回答
解釋一下==號,他比較的是一個對象在內(nèi)存中的地址值,比如2個字符串對象
String?s1?=?new?String("str"); String?s2?=?new?String("str");
如果用==號比較,會返回false,因?yàn)閯?chuàng)建了兩個對象,他們在內(nèi)存中地址的位置是不一樣的。equals的情況比較復(fù)雜,它是java.lang.Object類中的一個方法。因?yàn)閖ava中所有的類都默認(rèn)繼承于Object,所以所有的類都有這個方法。在Object類源碼中是這樣寫的。
public?boolean?equals(Object?obj)?{ return?(this?==?obj); }
他同樣使用==號進(jìn)行內(nèi)存地址的比較。但是許多java類中都重寫了這個方法,比如String。
public?boolean?equals(Object?anObject)?{ if?(this?==?anObject)?{ return?true; } if?(anObject?instanceof?String)?{ String?anotherString?=?(String)anObject; int?n?=?count; if?(n?==?anotherString.count)?{ char?v1[]?=?value; char?v2[]?=?anotherString.value; int?i?=?offset; int?j?=?anotherString.offset; while?(n--?!=?0)?{ if?(v1[i++]?!=?v2[j++]) return?false; } return?true; } } return?false; }
String里的方法,如果==號比較不相等,還會進(jìn)行一下值的比較。所以equals方法具體的作用要看當(dāng)前的那個類是如何實(shí)現(xiàn)重寫父類中該方法的。如果沒有重寫該方法,那么他和==號等價。
慕數(shù)據(jù)3565510 提問者
equals是判斷你輸入的值是否相等,比如String s=new String("a"); String s1=new String("a"),返回的結(jié)果是true,因?yàn)樗容^只是s的值是否等于s1的值,如果s1的值改為b,那么他們的返回結(jié)果就是false,而==是比較兩個對象指向的內(nèi)存地址是否相等和值的大小是否相等,因?yàn)閯?chuàng)建了兩個對象,他們的內(nèi)存地址肯定是不想等。
還有你說的obj的equals方法 ?,這個在String是重寫了,也就是不在比較引用了 ,只是比較值的內(nèi)容是不是相等,比如
String a = new Strting("s");
Sting a2 = new String("s");
這個是相等的?
因?yàn)镾tring 重寫了 obj
還有 這樣寫 String a = new String("s") ?String a2 = new String("s"); 結(jié)果是不會相等的 ,為什么? 是因?yàn)閚ew的關(guān)鍵字,是代表一個新的,意思是 當(dāng)我出現(xiàn)的時候 ,我不需要查詢以前??臻g存在的對象,所以 當(dāng)new的時候,是 不會相等的 ?上面解釋了的是?==
上面的解釋 有誤區(qū),都是新手貼源碼,是不是很裝, 你可以試試 String a= "s",String a2="s" ,這樣是相等的 為什么?是因?yàn)?第一次運(yùn)行 String a ="s",開辟了 s這個對象在棧空間, 第二次創(chuàng)建a2的時候 會在??臻g先去查有沒有一樣的 ,然后它查到了a1的值,然后給把a(bǔ)1值的一個引用給然后給 a2, 此時 a和a2的引用都指向"s"這個對象
莫忘初衷愛
慕數(shù)據(jù)3565510 提問者 回復(fù) 莫忘初衷愛
莫忘初衷愛 回復(fù) 慕數(shù)據(jù)3565510 提問者
沒聽懂。。。。orz
舉報
課程升級!以終為始告別枯燥,在開發(fā)和重構(gòu)中體會Java面向?qū)ο缶幊痰膴W妙
5 回答equals()和==的區(qū)別
3 回答== 和 equals有什么區(qū)別
1 回答==與equals的區(qū)別?
5 回答==跟equals的區(qū)別是什么?
2 回答equals與==有什么區(qū)別?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2017-05-11
解釋一下==號,他比較的是一個對象在內(nèi)存中的地址值,
比如2個字符串對象
如果用==號比較,會返回false,因?yàn)閯?chuàng)建了兩個對象,他們在內(nèi)存中地址的位置是不一樣的。
equals的情況比較復(fù)雜,它是java.lang.Object類中的一個方法。因?yàn)閖ava中所有的類都默認(rèn)繼承于Object,所以所有的類都有這個方法。
在Object類源碼中是這樣寫的。
他同樣使用==號進(jìn)行內(nèi)存地址的比較。但是許多java類中都重寫了這個方法,比如String。
String里的方法,如果==號比較不相等,還會進(jìn)行一下值的比較。
所以equals方法具體的作用要看當(dāng)前的那個類是如何實(shí)現(xiàn)重寫父類中該方法的。如果沒有重寫該方法,那么他和==號等價。
2017-05-14
equals是判斷你輸入的值是否相等,比如String s=new String("a"); String s1=new String("a"),返回的結(jié)果是true,因?yàn)樗容^只是s的值是否等于s1的值,如果s1的值改為b,那么他們的返回結(jié)果就是false,而==是比較兩個對象指向的內(nèi)存地址是否相等和值的大小是否相等,因?yàn)閯?chuàng)建了兩個對象,他們的內(nèi)存地址肯定是不想等。
2017-05-12
還有你說的obj的equals方法 ?,這個在String是重寫了,也就是不在比較引用了 ,只是比較值的內(nèi)容是不是相等,比如
String a = new Strting("s");
Sting a2 = new String("s");
這個是相等的?
因?yàn)镾tring 重寫了 obj
2017-05-12
還有 這樣寫 String a = new String("s") ?String a2 = new String("s"); 結(jié)果是不會相等的 ,為什么? 是因?yàn)閚ew的關(guān)鍵字,是代表一個新的,意思是 當(dāng)我出現(xiàn)的時候 ,我不需要查詢以前??臻g存在的對象,所以 當(dāng)new的時候,是 不會相等的 ?上面解釋了的是?==
2017-05-12
上面的解釋 有誤區(qū),都是新手貼源碼,是不是很裝, 你可以試試 String a= "s",String a2="s" ,這樣是相等的 為什么?是因?yàn)?第一次運(yùn)行 String a ="s",開辟了 s這個對象在棧空間, 第二次創(chuàng)建a2的時候 會在??臻g先去查有沒有一樣的 ,然后它查到了a1的值,然后給把a(bǔ)1值的一個引用給然后給 a2, 此時 a和a2的引用都指向"s"這個對象
2017-05-12
沒聽懂。。。。orz