前言
== 和 equals 的差別是什麼?
這似乎是每個java程式員都看過的一道題,簡單,确實了解非常簡單,根本不用怎麼理會。
但是前段時間面試,我有對一些2-3年的求職者問過這個問題。
不過我問的不是差別是什麼,我隻是問了,你有點進去看過源碼麼?
(同樣,你有點進去看過源碼麼?這句話似乎是我面試别人的時候說的最多的一句話。)
為什麼這麼喜歡說這個? 我就是單純地想看看有沒有看源碼的習慣。
得到很多答案都是: 沒有,但是我知道他們的差別和怎麼使用。 ok的,這樣也是ok的。
正文
俺今天就非得讓看到這個文章的人,理會理會一些它。
不啰嗦,接下來跟我一起看一眼 equals
String的 equals

源碼:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
分析:
part1
part2
part3
ps: String裡面的value 就是char[ ]數組,這個應該大家都該知道。
對象的equals
源碼:
public boolean equals(Object obj) {
return (this == obj);
}
分析:
對象的equals比較非常直接,就是引用的記憶體位址的比較,不一樣就false。
是以這也是為啥有些時候需要重寫equals方法的原因,寫成符合業務的比較邏輯
看源碼,我的個人觀點是,不求完全看懂,但是要看得細。