"=="和"equals()"區別?

(詳解見:http://blog.csdn.net/uponz/article/details/79117786)

1. “==”

  1. 基本數據類型,根據基本數據類型的值判斷是否相等,相等返回true,反之返回false

  2. 引用數據類型,比較的是引用類型的地址值

//基本數據類型
        //兩端數據類型可以不同,在不同情況下也可以返回true
        int a = 23;
        int b = 24;
        char c = 23;
        float d = 23.0F;
        System.out.println(a==b);//false
        System.out.println(a==c);//true
        System.out.println(a==d);//true
        char m = 'A';
        int n = 65;
        System.out.println(m==n);//true

        //引用數據類型
        //比較的是引用類型的地址值是否相等
        Object obj1 = new Object();
        Object obj2 = new Object();
        Object obj3 = obj1;

        System.out.println(obj1);//java.lang.Object@70dea4e
        System.out.println(obj2);//java.lang.Object@5c647e05
        System.out.println(obj3);//java.lang.Object@70dea4e

        System.out.println(obj1 == obj2);//false
        System.out.println(obj1 == obj3);//true

2. equlas()

  1. 只能處理引用數據類型

  2. 在Object中發現equlas()比較的仍然是引用變量的地址值

Object o1 = new Object();
        Object o2 = new Object();
        System.out.println(o1.equals(o2));//false
        System.out.println(o1 == o2);//false

        String str1 = "as";
        String str2 = "as";
        String str3 = new String("as");
        System.out.println(str1 == str2);//true-->比較的是常量池中"as"的地址值
        System.out.println(str1.equals(str2));//true-->比較的是常量池中"as"的地址值
        System.out.println(str1 == (str3));//false-->比較的是常量池中"as"的地址值和堆內存中new出來的對象賦給str3的地址值
        System.out.println(str1.equals(str3));//true-->String類重寫了父類Object的equlas(),故比較的是內容:"as"

        String s1 = new String("as");
        String s2 = new String("as");
        System.out.println(s1 == s2);//false-->比較的是地址值
        System.out.println(s1.equals(s2));//true-->String類重寫了父類Object的equlas(),故比較的是實體內容是否完全相同

【特別注意】

Object類中的equals方法和“==”是一樣的,沒有區別,而String類,Integer類等等一些類,是重寫了equals方法,才使得equals和“==不同”,所以,當自己創建類時,自動繼承了Object的equals方法,要想實現不同的等於比較,必須重寫equals方法。

“==”比”equal”運行速度快,因爲”==”只是比較引用.
最後有一個很重要小細節,最好寫
“”.equals(str);而不是str.equals(“”);
因爲str可能爲空,這容易出錯,所以最好將需要被比較的常量寫在前面。

(詳解見:http://blog.csdn.net/uponz/article/details/79117786)

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