完全搞懂 java中的“==”和“equals()”方法

一、" == "

  • 對於基本類型來說,比較的是值
  • 對於引用類型來說,比較的是他們的引用

注:這裏值得引用是什麼呢,在創建引用類型的時候,會把引用存到棧中,而真正的值存儲在堆中,而引用存儲了值在堆中的地址

        String x = "abc";
        String y = "abc";
        String z = new String("abc");

        System.out.println(x == y); //true
        System.out.println(x == z); //false

因爲常量“abc”是存儲在常量池的,指向的是同一個引用,所以x==y是true,而z是new的對象,他們的引用是不相同的,所以x == z是錯誤的

二、"equals"

在對象的equals中,本質上就還是==

但是,有特例,比如,String和Integer就重寫了equals方法,他們比較的是值

請看下面的例子:

        Artist artist = new Artist("資訊");
        Artist artist1 = new Artist("資訊");

        System.out.println(artist.equals(artist1));//false

結果爲false,結果和我們預期是一樣的,其實在沒有重寫equals方法的時候,equals方法和==相同,比較的是引用,下面是Object中equals的源碼:

默認按照==比較

那請看下面這段代碼:

        String s = new String("aaa");
        String ss = new String("aaa");
        System.out.println(s.equals(ss));//true

結果爲true,那爲什麼呢,因爲在設計String的時候,重寫了equals方法,請看源碼:

String最終比較的是值是否相同

總結一下:

"==" 對於基本類型來說是值比較,對於引用類型來說是比較的是引用;

而 equals 默認情況下是引用比較,只是很多類重寫了 equals 方法,比如 String、Integer 等把它變成了值比較

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