1. 序章

JavaのStringクラスequals()および contentEquals()メソッドは、String比較を実行するために使用されます。 ただし、これら2つの方法の機能には特定の違いがあります。

このチュートリアルでは、実際の例を使用して、これら2つの方法の違いを簡単に見ていきます。

2. equals()メソッド

equals()メソッドは、Java Stringクラスのpublicメソッドです。 これは、 Objectクラスの元のequals()メソッドをオーバーライドします。 このメソッドのシグネチャは次のとおりです。

public boolean equals(Object anObject)

このメソッドは、両方の個々の文字をチェックすることにより、2つの異なるS tringを比較します。 ただし、このメソッドはコンテンツをチェックするだけでなく、オブジェクトがStringのインスタンスであるかどうかもチェックします。 したがって、メソッドは真実これらすべての条件が満たされている場合:

  • 引数オブジェクトはnullではありません
  • Stringオブジェクトです
  • 文字のシーケンスは同じです

3. contentEquals()メソッド

equals()メソッドと同様に、 contentEquals()メソッドもStringのコンテンツを比較するために使用されます。 ただし、equals()メソッドとは異なり、contentEquals()はCharSequenceインターフェイスの実装を引数として取ります。つまり、 String StringBuffer StringBuilder CharBuffer、またはSegmentを比較できます。

このメソッドのシグネチャは次のとおりです。

public boolean contentEquals(StringBuffer sb)
public boolean contentEquals(CharSequence cs)

したがって、contentEquals()メソッドは、文字列のコンテンツのみに関係します。 引数がStringオブジェクトの場合、比較のために equals()メソッドが呼び出されます。 一方、一般的な文字シーケンスが提供されている場合、このメソッドは類似した位置にある個々の文字を比較します。

指定された引数の文字シーケンスが元のStringと一致する場合、メソッドはtrueを返します。 equals()メソッドとは異なり、 null引数がcontentEquals()メソッドに渡されると、NullPointerExceptionがスローされます。

4. 例

簡単なテストケースを作成して、これら2つの方法の動作を見てみましょう。 簡単にするために、コードに「Baeldung」という単語を使用しましょう。

まず、2つの同一のStringオブジェクトを取得してチェックします。 この場合、両方のメソッドがtrue値を返します。

String actualString = "baeldung";
String identicalString = "baeldung";

assertTrue(actualString.equals(identicalString));
assertTrue(actualString.contentEquals(identicalString));

次に、同じ内容のCharSequenceの2つの異なる実装を取り上げます。 最初の実装では、CharSequenceStringでインスタンス化します。 この場合、コンテンツとタイプが同じであるため、両方のメソッドが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クラスの2つのメソッドについて簡単に説明しました。 equals()メソッドは String のインスタンスのみを比較しますが、 contentEquals()メソッドはCharSequenceの任意の実装を比較できます。

結論として、オブジェクトのコンテンツのみに関心がある場合は、 contentEquals()を使用する必要があります。 一方、オブジェクトのタイプを確認することが重要な場合があります。 その場合は、 equals()メソッドを使用する必要があります。これにより、より厳密なチェック条件が得られます。

いつものように、コードスニペットはGitHub利用できます。