==和equals方法的區別與聯繫

Java程序中測試兩個變量是否相等有兩種方式:
一種是利用 == 運算符,另一種是利用equals()方法。
當使用 == 來判斷兩個變量是否相等時,如果兩個變量是基本類型變量,且都是數值類型,則只要兩個變量的值相等,就將返回true。
但對於兩個引用類型變量,只有它們指向同一個對象時,== 纔會返回true。
由於基本類型變量無調用方法一說,所以不能之間用equals()方法來判斷相等。
但是如果將基本數據類型變成包裝類,此時就可以用equals()方法來判斷相等。
當使用equals()方法來判斷兩個變量是否相等時,類似於“值相等”的判斷規則,並不嚴格要求兩個引用變量指向同一個對象。例如對於兩個字符串變量,只是要求它們引用字符串對象裏面包含的字符序列相同即可認同相等。
注:equals()方法是Object類提供的一個實例方法,因此所有引用變量都可調用該方法來判斷是否與其它引用變量相等。如String已經重寫了Object的equals()方法。

public class TestDemo2 {
    public static void main(String[] args) {
        String s1 = "瘋狂Java";//直接引用常量池中的"瘋狂Java"
        String s2 = "瘋狂";
        String s3 = "Java";
        String s4 = "瘋狂"+"Java";//s4在編譯時就確定下來,也是直接引用常量池中的值。
        String s5 = new String("瘋狂Java");//引用堆內存中新創建的String對象。
        String s6 = "瘋狂"+new String("Java");
        String s7 = s2 + s3;
        Integer num1 = new Integer(10);
        Integer num2 = new Integer(10);
        System.out.println(s1 == s4);
        System.out.println(s1 == s5);
        System.out.println(s1 == s6);
        System.out.println(s1 == s7);
        System.out.println(s5 == s6);
        System.out.println("===================");
        System.out.println(s1.equals(s4));
        System.out.println(s1.equals(s5));
        System.out.println(s1.equals(s6));
        System.out.println(s1.equals(s7));
        System.out.println(s5.equals(s6));
        System.out.println("===================");
        System.out.println(num1 == num2);
        System.out.println(num1 == 10);
        System.out.println(num1 == new Integer(10));
        System.out.println(num1.equals(new Integer(10)));
    }
}

運行結果如下
在這裏插入圖片描述

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