Java 中的 String equals() 與 contentEquals()

一、介紹

Java 中String類的equals()contentEquals()方法String比較。但是,這兩種方法的功能之間存在特定差異。

在本教程中,我們將使用實際示例快速了解這兩種方法之間的差異。

equals()方法

equals()方法是 Java Stringpublic它覆蓋了Object類中equals()方法。這個方法的簽名是:

public boolean equals(Object anObject)

tring的單個字符來比較兩個不同的字符串。但是,該方法不僅會檢查內容,還會檢查對像是否是String的實例。因此,該方法僅在滿足所有這些條件true

  • 參數對像不為null
  • 它是一個String對象
  • 字符序列相同

3. contentEquals()方法

equals()方法contentEquals()方法也用於比較String's內容。但是,與equals()方法不同, contentEquals() CharSequence接口的任何實現作為參數。這意味著可以比較StringStringBufferStringBuilderCharBuffer,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()方法,它為我們提供了更嚴格的檢查條件。