天天看點

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

前言

== 和 equals 的差別是什麼?

這似乎是每個java程式員都看過的一道題,簡單,确實了解非常簡單,根本不用怎麼理會。

但是前段時間面試,我有對一些2-3年的求職者問過這個問題。

不過我問的不是差別是什麼,我隻是問了,你有點進去看過源碼麼?

(同樣,你有點進去看過源碼麼?這句話似乎是我面試别人的時候說的最多的一句話。)

為什麼這麼喜歡說這個? 我就是單純地想看看有沒有看源碼的習慣。 

得到很多答案都是: 沒有,但是我知道他們的差別和怎麼使用。 ok的,這樣也是ok的。

正文

俺今天就非得讓看到這個文章的人,理會理會一些它。

不啰嗦,接下來跟我一起看一眼 equals 

 String的 equals

Java 看一眼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

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

part2

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

part3

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

ps: String裡面的value 就是char[ ]數組,這個應該大家都該知道。

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

對象的equals

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

源碼:

public boolean equals(Object obj) {
        return (this == obj);
    }      

分析:

對象的equals比較非常直接,就是引用的記憶體位址的比較,不一樣就false。

是以這也是為啥有些時候需要重寫equals方法的原因,寫成符合業務的比較邏輯

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

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