第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

關(guān)于equals 和==d的區(qū)別?

首先equals和==的區(qū)別是什么?

然后重載Object后,equals和==的意義會改變嗎?

正在回答

6 回答

解釋一下==號,他比較的是一個對象在內(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)重寫父類中該方法的。如果沒有重寫該方法,那么他和==號等價。

1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

慕數(shù)據(jù)3565510 提問者

String s1 = new String("str"); 是什么意思,我以為只有創(chuàng)建對象可以這么寫
2017-05-12 回復(fù) 有任何疑惑可以回復(fù)我~
#2

慕數(shù)據(jù)3565510 提問者

非常感謝!
2017-05-18 回復(fù) 有任何疑惑可以回復(fù)我~

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)存地址肯定是不想等。

1 回復(fù) 有任何疑惑可以回復(fù)我~

還有你說的obj的equals方法 ?,這個在String是重寫了,也就是不在比較引用了 ,只是比較值的內(nèi)容是不是相等,比如

String a = new Strting("s");

Sting a2 = new String("s");

這個是相等的?

因?yàn)镾tring 重寫了 obj

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

慕數(shù)據(jù)3565510 提問者

好麻煩,我在理解理解吧
2017-05-12 回復(fù) 有任何疑惑可以回復(fù)我~

還有 這樣寫 String a = new String("s") ?String a2 = new String("s"); 結(jié)果是不會相等的 ,為什么? 是因?yàn)閚ew的關(guān)鍵字,是代表一個新的,意思是 當(dāng)我出現(xiàn)的時候 ,我不需要查詢以前??臻g存在的對象,所以 當(dāng)new的時候,是 不會相等的 ?上面解釋了的是?==

0 回復(fù) 有任何疑惑可以回復(fù)我~

上面的解釋 有誤區(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"這個對象

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

莫忘初衷愛

上面寫錯了 上面寫的a1是a
2017-05-12 回復(fù) 有任何疑惑可以回復(fù)我~
#2

莫忘初衷愛

又看到一個錯誤...把開辟了了s這個對象在??臻g換成堆空間, 棧是 存放a 和a2 這種引用的空間 s是存放在堆空間的
2017-05-12 回復(fù) 有任何疑惑可以回復(fù)我~
#3

慕數(shù)據(jù)3565510 提問者 回復(fù) 莫忘初衷愛

??臻g和堆空間我不知道,但我明白你的意思了在內(nèi)存中建立了一個名為a的字符串“s”,再建立a2的時候因?yàn)橛?ldquo;s”了就直接指向了,不在另外開辟內(nèi)存空間,那么a==a2是true?
2017-05-12 回復(fù) 有任何疑惑可以回復(fù)我~
#4

莫忘初衷愛 回復(fù) 慕數(shù)據(jù)3565510 提問者

對的,是的.
2017-05-13 回復(fù) 有任何疑惑可以回復(fù)我~
#5

慕數(shù)據(jù)3565510 提問者 回復(fù) 莫忘初衷愛

但是視頻里不是說==表示的是a和a2的內(nèi)存地址是否相等么?
2017-05-13 回復(fù) 有任何疑惑可以回復(fù)我~
查看2條回復(fù)

沒聽懂。。。。orz

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消
Java入門第二季 升級版
  • 參與學(xué)習(xí)       531098    人
  • 解答問題       6280    個

課程升級!以終為始告別枯燥,在開發(fā)和重構(gòu)中體會Java面向?qū)ο缶幊痰膴W妙

進(jìn)入課程

關(guān)于equals 和==d的區(qū)別?

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號