1. 程式人生 > >java中的equals與==

java中的equals與==

bsp 源碼 內部 brush ++ class object類 功能 length

equals()與==都是java中用於進行比較的,返回boolean值,不同的是equals()是Object類中定義的一個方法,==

是一個比較運算符。下面是equals()在Object中的源碼:

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

我們驚奇的發現這方法和==不是一模一樣嗎??下面再來看看String類中equals()方法的源碼:

public boolean equals(Object anObject) {
        //先進行地址值的判斷,如果想等直接返回true
        if (this == anObject) {
            return true;
        }
        //如果地址不相等,判斷傳進來的對象是不是String類型的一個實例
        if (anObject instanceof String) {
            //發現是string類型的實例,將它強轉為string類型(強轉之後就可以調用string的方法了)
            String anotherString = (String) anObject;
            //value是string內部的一個char數組,每個string對象都對應一個char數組,得到長度
            int n = value.length;
            //先進行長度的比較,如果相同才能進行下一步
            if (n == anotherString.value.length) {
                //發現長度相同,將string對應的char數組中的字符一個一個進行比較
                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;
    }

顯然String對equals()方法進行了重寫,使得它具有比較String內容是否相等的功能,此時的equals()就不在是僅僅比較對象地址了,

如果地址不相同,他會比較對象內容是否相同,如果相同會返回true。

總結如下:

equals()和==都是用於比較運算。

equals()是Object類中的一個方法,用於比較對象是否相等,在Object類中,它的含義

和==相同,比較的都是對象的地址,但有時我們要比較對象的內容,此時要重寫equals方法,例如String類就默認重寫了equals方法

比較對象的內容。

==是一個比較運算符,當它兩邊是基本數據類型時,就是直接比較兩個數據的值,當兩邊是對象時,比較的是對象的地址。

java中的equals與==