1.Equals 很多人對equals方法的用法有些模糊,這裡來為大家梳理下: 字元串中的equals方法,該方法用來判斷兩個字元串的內容是否相同。 例1: 從例1中我們可以看出,兩個字元串之間的比較,無論用”==”號還是equals來進行,只要內容相同,結果就為True,內容不同,結果就為Fals ...
1.Equals
很多人對equals方法的用法有些模糊,這裡來為大家梳理下:
字元串中的equals方法,該方法用來判斷兩個字元串的內容是否相同。
例1:
String str1="Hello"; String str2="Hello"; String str3="java"; //字元串預設比較的是內容是否相同 //"=="號比較 System.out.println("str1==str2:" + (str1 == str2));//true System.out.println("str1==str3:" + (str1 == str3));//false //equals比較 System.out.println("str1.equals(str2):" + str1.equals(str2));//true System.out.println("str1.equals(str3):" + str1.equals(str3));//false
從例1中我們可以看出,兩個字元串之間的比較,無論用”==”號還是equals來進行,只要內容相同,結果就為True,內容不同,結果就為False;因此可以看出在字元串中,equals是用來判斷兩個字元串的內容是否相同.
那麼在兩個自定義對象之間的比較,是不是也是只要內容相同,就為True呢?我們來看代碼:
例2:
//比較兩個對象是否相同 Person p1 = new Person("小明", 18); Person p2 = new Person("小明", 18); System.out.println("p1.equals(p2):" + p1.equals(p2));//false
從例2中看,結果是False!!!這是為什麼呢?
我們來分析下源碼:
按住crtl+左鍵單擊String 可以進入字元串源碼中,
可以看出,String類重寫了Object類的equals方法,所以能夠完成內同比較功能。如果是我們自定義類的兩個對象要進行比較內容是否相同,也需要進行覆蓋重寫Object中的equals方法
Object中的equals方法後結果為true了
//比較兩個對象是否相同 Person p1 = new Person("小明", 18); Person p2 = new Person("小明", 18); // System.out.println("p1.equals(p2):" + p1.equals(p2));//false System.out.println("p1.equals(p2):" + p1.equals(p2));//true
總結:
1.預設地址比較
如果沒有覆蓋重寫equals方法,那麼Object類中預設進行==運算符的對象地址比較,只要不是同一個對象,結果必然為false。
2.對象內容比較
如果希望進行對象的內容比較,即所有或指定的部分成員變數相同就判定兩個對象相同,則可以覆蓋重寫equals方法,在重寫的equals方法中實現邏輯。
重點:如果要用equals方法對對象的內容比較,一定要重寫Object中的equals方法!!!