一、介绍
Java 中String
类的equals()
和contentEquals()
方法String
比较。但是,这两种方法的功能之间存在特定差异。
在本教程中,我们将使用实际示例快速了解这两种方法之间的差异。
equals()
方法
equals()
方法是JavaString
类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()
方法,它为我们提供了更严格的检查条件。
0 评论