原创

Java中的字符串equals()与contentEquals()

温馨提示:
本文最后更新于 2022年11月16日,已超过 19 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

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上.

正文到此结束