Java的equsals和==

毅毅毅毅毅發表於2021-08-08

先上結論:在我們常用的類中equals被重寫後,作用就是為了比較物件的內容,==是比較物件的記憶體地址。但並不能說所有的equals方法就是比較物件的內容。

Java 中的==:

1、對於物件引用型別:“==”比較的是物件的記憶體地址。

比如說:

 String s1 = "Hello";
 String s2 = new String ("Hello");
System.out.println(s1 == s2);(false)

我們知道在使用new String時,會重新建立一個String物件,因此,自然s1和s2引用是指向兩個不同的地方,因此顯示為false.

2、對於基本型別資料(int,double等),其實比較的是它的值。

 

Java 中equals方法:

1.equals是基本資料的包裝型別Integer,Float, Double等常用類具有的方法,它(這裡為Integer類)的作用,在官方給的(Integer)文件中,說的就是:進行物件間的比較,只有在滿足判斷條件,Integer所含的值和本物件的值相同時才會返回true。、

簡單來說,就是同型別,所含值相同即返回true.

Integer底層實現的時候用的是Integer.intValue();將兩個物件之間的比較變成了基本資料型別的值比較。

 

2.但是,在最底層Object類中,equals方法和==是沒有區別的。我們比較的還是兩個物件的記憶體地址。

 

眾所周知,我們所有的類都直接或間接地繼承自java.lang.Object類,因此我們可以通過重寫equals方法來實現我們自己想要的比較方法。之所以我們平常在用equals時,都是在比較物件中的值,是因為對equals進行了重寫,讓他去進行物件中的值比較(如最後上面的Integer類)。

所以我們也不能說,equals比較的就一定是物件的內容。根據業務邏輯的不同,是能夠衍生出更多不同方法的。

 

相關文章