1

私はJUnitを学んでいますが、assertEquals()がequals()メソッドを呼び出してオブジェクトを比較していることを知っています...では、2つの正規表現パターンオブジェクトを比較する次のテストに合格しないのはなぜですか?

@Test
public void testTwoCompiledPattern()
{   
    assertEquals(Pattern.compile("test"), Pattern.compile("test"));
}

これは代わりに合格します:

@Test
public void testTwoCompiledPattern()
{   
    assertEquals(Pattern.compile("test").toString(), Pattern.compile("test").toString());
}
4

3 に答える 3

8

これは、toString() メソッドを呼び出すと、Pattern クラスがオーバーライドするため、どちらも「テスト」文字列を返すためです。しかし、Pattern オブジェクトだけを比較すると、それらは 2 つの異なるオブジェクトであるため、同じ状態であっても、一方が他方と同じではありません。

equals メソッドは、参照が等しいかどうかをチェックします。

于 2012-06-14T07:54:05.347 に答える
1

Pattern オブジェクトの .equals は、両方が同じオブジェクトを参照しているかどうかをチェックします。

ただし、String.equals メソッドは、両方の文字列が同一かどうかをチェックします (オブジェクト参照の比較ではありません)。

つまり、2番目が合格した理由です。

于 2012-06-14T07:57:08.560 に答える
0

このequals()メソッドは、2 つのオブジェクトのハッシュ コードを比較します。前者の場合、異なるハッシュ コードを持つ 2 つの異なるオブジェクトがあるため、テストは失敗します。後者の場合、同じハッシュ コードを持つ「test」という 2 つの文字列があるため、テストはパスします。

于 2012-06-14T08:24:28.373 に答える