java中==和equlas區別

Slowly_Man發表於2018-05-28

==和euqals

要區分==和equals首先我們要知道==是對地址值進行比較,equals在常用的String類中我們似乎看到的是對兩個字串的值是否相等進行比較

要區分這兩者到底有何不同,需要簡單看一下Object和String的原始碼

Object原始碼

//Obejct中的equlas
public boolean equals(Object obj) {
    return (this == obj);
    }

String原始碼

//String中的equals
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;
    }

  • Object中可以明顯看出equals方法通過==進行地址值的比較,可以看出equals和==在這裡沒有區別
  • String重寫了equals方法後仍然通過==進行地址值的比較,但是增加了值比較的判定條件,在String類中equals並不能和==相提並論

總結

從上面條件我們可以得出結論
1. equals本質是對地址值進行比較和==沒有什麼區別
2. 在平常業務處理中我們經常會對equals和hashcode方法進行重寫,重寫後的equals增加新的業務判斷邏輯,不能與==劃上等號
3. equals和==是否有區別取決於我們平日業務邏輯的制定,不能隨口臆斷

相關文章