Java中equals和==比的是什麼

藍天白雲還有大海發表於2018-06-15

1 . ==

int n = 3;
int m = 3;

System.out.println(n == m);

String str = new String("hello");
String str1 = new String("hello");
String str2 = new String("hello");

System.out.println(str1 == str2);

str1 = str;
str2 = str;
System.out.println(str1 == str2);

輸出結果 : true false true

對於八大基本型別==比較的是值所以n==m為true
對於引用型別String等比較的是物件在記憶體中的儲存地址,所以str1 == str2為false
最後一個為true,是因為str1和str2都指向了str指向的物件

2 . equals

equals方法是基類Object中的方法,因此對於所有的繼承於Object的類都會有該方法。

下面是Object類中equals方法的實現:


在Object類中,equals方法是用來比較兩個物件的引用是否相等,即是否指向同一個物件。

String str1 = new String("hello");
String str2 = new String("hello");

System.out.println(str1.equals(str2));

返回true
Why?

下面是String類中equals方法的具體實現:

可以看出,String類對equals方法進行了重寫,用來比較指向的字串物件所儲存的字串是否相等。

其他的一些類諸如Double,Date,Integer等,都對equals方法進行了重寫用來比較指向的物件所儲存的內容是否相等。

總結來說:

1.對於==,如果作用於基本資料型別,則比較儲存的值是否相等;如果作用於引用型別的變數,則比較的是所指向的物件的地址;
2.對於equals方法,注意:equals方法不能作用於基本資料型別的變數
如果沒有對equals方法進行重寫,則比較的是引用型別的變數所指向的物件的地址;
諸如String、Date等類對equals方法進行了重寫的話,比較的是所指向的物件的內容。

相關文章