Java 看一眼equals吧,都用這麼久了

前言


== 和 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方法的原因,寫成符合業務的比較邏輯

 

 

 看源碼,我的個人觀點是,不求完全看懂,但是要看得細。

所謂看細節,不是說每行都看那就叫看得細,而是要持有敏感度,能抓住關鍵點,那才叫看得細。

這也是爲啥有的大佬,看源碼的時候速度快還又能找到問題所在點。

多看看源碼,對於剛出來的小夥,只有好處沒有壞處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章