日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
終結(jié)篇:==和equals有什么區(qū)別?

== 和 equals 有什么區(qū)別?這個問題本身不難,但是被問到的頻率很高,且大部分人的回答都不夠全面,讓人聽了有種“恨鐵不成鋼”的感覺,所以今天咱們就來好好聊聊這個問題。

站在用戶的角度思考問題,與客戶深入溝通,找到普陀網(wǎng)站設(shè)計與普陀網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、主機域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋普陀地區(qū)。

1.典型回答

對于 Object 來說,其 equals 方法底層實現(xiàn)就是“==”,如下 JDK 的 Object 源碼如下:

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

也就是說,對于 Object 對象來說,equals 和 == 都是一樣的,都是比較對象的引用是否相同。但是,在 JDK 中的其他類中通常會重寫 equals 以實現(xiàn)具體的值比較,例如 Integer 中的 equals 和 String 中的 equals 等,如下源碼所示。 Integer 中的 equals 實現(xiàn)源碼如下:

public boolean equals(Object obj) {
if (obj instanceof Integer) {
    return value == ((Integer)obj).intValue();
}
return false;
}

從上述源碼可以看出,Integer 中會先將 Integer 對象轉(zhuǎn)換成基礎(chǔ)類型 int 值來進行比較,所以此時就不再是對比兩個對象的引用了,而是對比兩個對象的值是否相等。 String 中的 equals 實現(xiàn)源碼如下:

public boolean equals(Object anObject) {
if (this == anObject) { // 引用相同返回 true,引用相同,那么值肯定相同了
    return true;
}
return (anObject instanceof String aString)
&& (!COMPACT_STRINGS || this.coder == aString.coder)
&& StringLatin1.equals(value, aString.value); // equals 為下面的 equals 方法
}
@IntrinsicCandidate
public static boolean equals(byte[] value, byte[] other) {
    if (value.length == other.length) {
        for (int i = 0; i < value.length; i++) { // 循環(huán)每個字符對比,本質(zhì)是值比較
            if (value[i] != other[i]) {
                return false;
            }
        }
        return true;
    }
    return false;
}

從 String 中的 equals 中可以看出,它和 Integer 一樣,是將 Object 中的引用比較重寫成了值比較了。

2.考點分析

所以,對于 Object 來說,== 和 equals 都是一樣的,都是用來對比兩個對象的引用是否相同的,而其他 Java 中的類中,如 String 或 Integer 等,通常都會重寫 equals 讓其變?yōu)楸容^具體的值是否相同,而非引用是否相同。 所以,我們通常會使用 == 來對比兩個對象的引用是否相同,而使用 equals 對比兩個值是否相同(前提條件是重寫了 equals 方法)。

3.知識擴展

如果我們自定義一個類,并且想和 Integer 或 String 中的 equals 一樣,用其對比值而非引用是否相同的實現(xiàn)代碼如下:

public class Person {
    private String name;
    private int age;
    // 忽略構(gòu)造方法和 Getter、Setter 方法......
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        Person other = (Person) obj;
        return this.age == other.age && this.name.equals(other.name);
    }
}

小結(jié)

對于 Object 來說,equals 是用 == 實現(xiàn)的,所以二者是相同的,都是用來比較兩個對象的引用是否相同的,但 Java 中的其他類,都會重寫 equals 讓其變?yōu)橹当容^,而非引用比較,如 Integer 和 String 都是這樣。


新聞名稱:終結(jié)篇:==和equals有什么區(qū)別?
網(wǎng)頁鏈接:http://www.5511xx.com/article/dhiepjj.html