Java中的字符串equals()与contentEquals()
1.简介
String 类中的 equals() 和contentEquals()方法,在Java中用于执行字符串比较,然而,这两种方法的功能之间存在特定的差异。
在本教程中,我们将使用实际示例快速了解这两种方法之间的差异。
2 equals() 方法
这个 equals() 方法是String 类的 public 方法,它会覆盖原始Object 类的 equals() 方法 :
public boolean equals(Object anObject)
该方法比较了两种不同的字符串中的单个字符。 但是,该方法不仅检查内容,还检查对象是否是的一个字符串实例.因此,如果满足所有这些条件该方法就返回 true :
- 参数对象不是 无效的
- 这是一个 字符串 对象
- 字符的顺序是相同的
3 contentEquals() 方法
类似于equals() 方法 contentEquals() 方法也用于比较 字符串的 所容纳之物, 但是并不像equals() 方法, contentEquals()采用 CharSequence 接口作为参数。 这意味着 String, StringBuffer, StringBuilder, CharBuffer 或 Segment 可以进行比较。
此方法的签名为:
public boolean contentEquals(StringBuffer sb)
public boolean contentEquals(CharSequence cs)
因此 contentEqualse()方法只与字符串的内容有关。如果参数是 String 对象,则equals()方法将被调用用于比较。另一方面,如果提供了通用字符序列,则该方法将比较相似位置的单个字符。
如果给定参数中的字符序列与原始字符序列匹配, 该方法返回 true 。与 equals() 方法,如果 无效的 参数传递给 contentEquals()方法,它会抛出 NullPointException.
4.示例
让我们通过编写简单的测试用例来看看这两种方法的实际应用。为了简单起见,让我们在代码中使用“Baeldung”一词。
首先,我们取两个相同的 String 对象并检查它们。在这种情况下,两个方法都将返回 true :
String actualString = "baeldung";
String identicalString = "baeldung";
assertTrue(actualString.equals(identicalString));
assertTrue(actualString.contentEquals(identicalString));
接下来,我们采用两种不同的实现 CharSequence 具有相同的内容。对于第一个实现,我们将用一个 字符串实例化 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()方法仅比较的实例,而contentEquals()方法可以比较 CharSequence.
总之,当我们只关心对象的内容时, 我们应该使用 contentEquals()。另一方面,有时检查对象的类型可能很重要。在这种情况下,我们应该使用 equals()该方法,因为他为我们提供了更严格的检查条件。
一如既往,代码段是可用的 在GitHub上.
- 本文标签: Java
- 本文链接: https://www.v8en.com/article/283
- 版权声明: 本文由SIMON原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权