Java 中的 String equals() 與 contentEquals()
- java
一、介紹
Java 中String
類的equals()
和contentEquals()
方法String
比較。但是,這兩種方法的功能之間存在特定差異。
在本教程中,我們將使用實際示例快速了解這兩種方法之間的差異。
equals()
方法
equals()
方法是 Java String
類public
它覆蓋了Object
類中equals()
方法。這個方法的簽名是:
public boolean equals(Object anObject)
單個方法用來來比較兩個不同的字符串。但是,該方法不僅會檢查內容,還會檢查對像是否是String
的實例。因此,該方法僅在滿足所有這些條件true
- 參數對像不為
null
- 它是一個
String
對象 - 字符序列相同
3. contentEquals()
方法
與equals()
方法contentEquals()
方法也用於比較String's
內容。但是,與equals()
方法不同, contentEquals()
CharSequence
接口的任何實現作為參數。這意味著可以比較String
、 StringBuffer
、 StringBuilder
、 CharBuffer,
或Segment
這個方法的簽名是:
public boolean contentEquals(StringBuffer sb)
public boolean contentEquals(CharSequence cs)
因此, contentEquals()
方法只關心 string 的內容。如果參數是String
對象, equals()
方法進行比較。另一方面,如果提供了通用字符序列,則該方法比較相似位置的單個字符。
如果給定參數中的字符序列與原始String
匹配,則該方法返回true
。與equals()
方法不同,如果將null
參數傳遞給contentEquals()
方法,則會拋出NullPointerException
。
4. 例子
讓我們通過編寫簡單的測試用例來看看這兩種方法的實際效果。為簡單起見,讓我們在代碼中使用“Baeldung”一詞。
首先,我們將獲取兩個相同的String
對象並檢查它們。在這種情況下,兩種方法都將返回一個true
值:
String actualString = "baeldung";
String identicalString = "baeldung";
assertTrue(actualString.equals(identicalString));
assertTrue(actualString.contentEquals(identicalString));
接下來,我們採用具有相同內容的CharSequence
對於第一個實現,我們將使用String
CharSequence
。在這種情況下,兩種方法都應該返回true
因為內容和類型是相同的:
CharSequence identicalStringInstance = "baeldung";
assertTrue(actualString.equals(identicalStringInstance));
assertTrue(actualString.contentEquals(identicalStringInstance));
對於下一個示例,我們將採用StringBuffer
實現。由於contentEquals()
方法只檢查內容,它應該返回true
。但是, equals()
方法應該是false
:
CharSequence identicalStringBufferInstance = new StringBuffer("baeldung");
assertFalse(actualString.equals(identicalStringBufferInstance));
assertTrue(actualString.contentEquals(identicalStringBufferInstance));
5. 結論
在本文中,我們快速瀏覽了String
類的兩個方法。雖然equals()
方法只比較String
實例,但contentEquals()
方法可以比較CharSequence
任何實現。
總而言之,當我們只關心對象的內容時,我們應該使用contentEquals()
另一方面,有時檢查對象的類型可能很重要。在這種情況下,我們應該使用equals()
方法,它為我們提供了更嚴格的檢查條件。