文字列equals()とJavaのcontentEquals()
1. 序章
JavaのStringクラスのequals()および contentEquals()メソッドは、String比較を実行するために使用されます。 ただし、これら2つの方法の機能には特定の違いがあります。
このチュートリアルでは、実際の例を使用して、これら2つの方法の違いを簡単に見ていきます。
2. equals()メソッド
equals()メソッドは、Java Stringクラスのpublicメソッドです。 これは、 Objectクラスの元のequals()メソッドをオーバーライドします。 このメソッドのシグネチャは次のとおりです。
public boolean equals(Object anObject)
このメソッドは、両方の個々の文字をチェックすることにより、2つの異なるS tringを比較します。
- 引数オブジェクトは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つの異なる実装を取り上げます。 最初の実装では、CharSequenceをStringでインスタンス化します。 この場合、コンテンツとタイプが同じであるため、両方のメソッドが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で利用できます。