課程
/后端開發(fā)
/Java
/Java入門第三季
==與equals的區(qū)別是什么
2015-04-06
源自:Java入門第三季 6-1
正在回答
解釋一下==號,他比較的是一個對象在內(nèi)存中的地址值,比如2個字符串對象String s1 = new String("str");String s2 = new String("str");如果用==號比較,會返回false,因為創(chuàng)建了兩個對象,他們在內(nèi)存中地址的位置是不一樣的。equals的情況比較復(fù)雜,它是java.lang.Object類中的一個方法。因為java中所有的類都默認(rèn)繼承于Object,所以所有的類都有這個方法。在Object類源碼中是這樣寫的。public boolean equals(Object obj) { return (this == obj);}他同樣使用==號進行內(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里的方法,如果==號比較不相等,還會進行一下值的比較。所以equals方法具體的作用要看當(dāng)前的那個類是如何實現(xiàn)重寫父類中該方法的。如果沒有重寫該方法,那么他和==號等價。
pretty_sunshine 提問者
舉報
Java中你必須懂得常用技能,不容錯過的精彩,快來加入吧
4 回答equals 與 == 的區(qū)別
3 回答null與長度為0的區(qū)別是什么
1 回答HashSet與HashMap有什么區(qū)別?
1 回答Comparable與Comparator的區(qū)別
3 回答arraylist與linkedList的區(qū)別
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2015-04-07
解釋一下==號,他比較的是一個對象在內(nèi)存中的地址值,
比如2個字符串對象
String s1 = new String("str");
String s2 = new String("str");
如果用==號比較,會返回false,因為創(chuàng)建了兩個對象,他們在內(nèi)存中地址的位置是不一樣的。
equals的情況比較復(fù)雜,它是java.lang.Object類中的一個方法。因為java中所有的類都默認(rèn)繼承于Object,所以所有的類都有這個方法。
在Object類源碼中是這樣寫的。
public boolean equals(Object obj) {
return (this == obj);
}
他同樣使用==號進行內(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里的方法,如果==號比較不相等,還會進行一下值的比較。
所以equals方法具體的作用要看當(dāng)前的那個類是如何實現(xiàn)重寫父類中該方法的。如果沒有重寫該方法,那么他和==號等價。